From 76600c38e6243af3d28025af08cb24984711460d Mon Sep 17 00:00:00 2001
From: Olivier Delaigue <olivier.delaigue@irstea.fr>
Date: Thu, 9 Apr 2015 14:08:36 +0200
Subject: [PATCH] test

---
 INDEX                                  |  56 ---
 MD5                                    |  23 --
 Meta/Rd.rds                            | Bin 1288 -> 0 bytes
 Meta/data.rds                          | Bin 200 -> 0 bytes
 Meta/hsearch.rds                       | Bin 1148 -> 0 bytes
 Meta/links.rds                         | Bin 485 -> 0 bytes
 Meta/nsInfo.rds                        | Bin 409 -> 0 bytes
 Meta/package.rds                       | Bin 752 -> 0 bytes
 R/BasinData.R                          |  42 ++
 R/Calibration.R                        |  29 ++
 R/Calibration_HBAN.R                   | 401 ++++++++++++++++++
 R/Calibration_optim.R                  | 149 +++++++
 R/CreateCalibOptions.R                 | 226 +++++++++++
 R/CreateInputsCrit.R                   |  81 ++++
 R/CreateInputsModel.R                  | 156 +++++++
 R/CreateRunOptions.R                   | 260 ++++++++++++
 R/DataAltiExtrapolation_HBAN.R         | 540 +++++++++++++++++++++++++
 R/ErrorCrit.R                          |  22 +
 R/ErrorCrit_KGE.R                      | 122 ++++++
 R/ErrorCrit_KGE2.R                     | 124 ++++++
 R/ErrorCrit_NSE.R                      |  87 ++++
 R/ErrorCrit_RMSE.R                     |  81 ++++
 R/PEdaily_Oudin.R                      |  58 +++
 R/RunModel.R                           |  22 +
 R/RunModel_CemaNeige.R                 | 131 ++++++
 R/RunModel_CemaNeigeGR4J.R             | 208 ++++++++++
 R/RunModel_CemaNeigeGR5J.R             | 210 ++++++++++
 R/RunModel_CemaNeigeGR6J.R             | 211 ++++++++++
 R/RunModel_GR4J.R                      | 128 ++++++
 R/RunModel_GR5J.R                      | 131 ++++++
 R/RunModel_GR6J.R                      | 132 ++++++
 R/TransfoParam.R                       |  19 +
 R/TransfoParam_CemaNeige.R             |  37 ++
 R/TransfoParam_GR4J.R                  |  41 ++
 R/TransfoParam_GR5J.R                  |  45 +++
 R/TransfoParam_GR6J.R                  |  47 +++
 R/airGR                                |  27 --
 R/airGR.rdb                            | Bin 46952 -> 0 bytes
 R/airGR.rdx                            | Bin 645 -> 0 bytes
 R/plot_OutputsModel.R                  | 331 +++++++++++++++
 airGR.Rproj                            |  17 +
 help/AnIndex                           |  31 --
 help/airGR.rdb                         | Bin 115007 -> 0 bytes
 help/airGR.rdx                         | Bin 836 -> 0 bytes
 help/aliases.rds                       | Bin 314 -> 0 bytes
 help/paths.rds                         | Bin 352 -> 0 bytes
 html/00Index.html                      |  87 ----
 html/R.css                             |  57 ---
 man/BasinInfo.Rd                       |  21 +
 man/BasinObs.Rd                        |  22 +
 man/Calibration.Rd                     |  94 +++++
 man/Calibration_HBAN.Rd                | 127 ++++++
 man/Calibration_optim.Rd               | 103 +++++
 man/CreateCalibOptions.Rd              | 128 ++++++
 man/CreateInputsCrit.Rd                | 112 +++++
 man/CreateInputsModel.Rd               |  89 ++++
 man/CreateRunOptions.Rd                | 121 ++++++
 man/DataAltiExtrapolation_HBAN.Rd      |  64 +++
 man/ErrorCrit.Rd                       |  92 +++++
 man/ErrorCrit_KGE.Rd                   |  50 +++
 man/ErrorCrit_KGE2.Rd                  |  53 +++
 man/ErrorCrit_NSE.Rd                   |  48 +++
 man/ErrorCrit_RMSE.Rd                  |  43 ++
 man/PEdaily_Oudin.Rd                   |  36 ++
 man/RunModel.Rd                        |  61 +++
 man/RunModel_CemaNeige.Rd              |  84 ++++
 man/RunModel_CemaNeigeGR4J.Rd          | 112 +++++
 man/RunModel_CemaNeigeGR5J.Rd          | 115 ++++++
 man/RunModel_CemaNeigeGR6J.Rd          |  83 ++++
 man/RunModel_GR4J.Rd                   |  92 +++++
 man/RunModel_GR5J.Rd                   |  95 +++++
 man/RunModel_GR6J.Rd                   |  96 +++++
 man/TransfoParam.Rd                    |  45 +++
 man/TransfoParam_CemaNeige.Rd          |  43 ++
 man/TransfoParam_GR4J.Rd               |  43 ++
 man/TransfoParam_GR5J.Rd               |  43 ++
 man/TransfoParam_GR6J.Rd               |  43 ++
 man/airGR.Rd                           |  53 +++
 man/plot_OutputsModel.Rd               |  37 ++
 {libs/i386 => src-i386}/airGR.dll      | Bin 24064 -> 24064 bytes
 src-i386/frun_CEMANEIGE.f              | 128 ++++++
 src-i386/frun_CEMANEIGE.o              | Bin 0 -> 1095 bytes
 src-i386/frun_GR4J.f                   | 225 +++++++++++
 src-i386/frun_GR4J.o                   | Bin 0 -> 2505 bytes
 src-i386/frun_GR5J.f                   | 226 +++++++++++
 src-i386/frun_GR5J.o                   | Bin 0 -> 2433 bytes
 src-i386/frun_GR6J.f                   | 249 ++++++++++++
 src-i386/frun_GR6J.o                   | Bin 0 -> 2977 bytes
 src-i386/utils.f                       | 272 +++++++++++++
 src-i386/utils.o                       | Bin 0 -> 2548 bytes
 src-x64/airGR.dll                      | Bin 0 -> 28672 bytes
 src-x64/frun_CEMANEIGE.f               | 128 ++++++
 src-x64/frun_CEMANEIGE.o               | Bin 0 -> 1498 bytes
 src-x64/frun_GR4J.f                    | 225 +++++++++++
 src-x64/frun_GR4J.o                    | Bin 0 -> 2975 bytes
 src-x64/frun_GR5J.f                    | 226 +++++++++++
 src-x64/frun_GR5J.o                    | Bin 0 -> 2875 bytes
 src-x64/frun_GR6J.f                    | 249 ++++++++++++
 src-x64/frun_GR6J.o                    | Bin 0 -> 3415 bytes
 src-x64/utils.f                        | 272 +++++++++++++
 src-x64/utils.o                        | Bin 0 -> 2944 bytes
 src/frun_CEMANEIGE.f                   | 128 ++++++
 src/frun_GR4J.f                        | 225 +++++++++++
 src/frun_GR5J.f                        | 226 +++++++++++
 src/frun_GR6J.f                        | 249 ++++++++++++
 src/utils.f                            | 272 +++++++++++++
 tests/example_Calibration.R            |  47 +++
 tests/example_Calibration_HBAN.R       |  46 +++
 tests/example_Calibration_optim.R      |  45 +++
 tests/example_ErrorCrit.R              |  60 +++
 tests/example_RunModel.R               |  29 ++
 tests/example_RunModel_CemaNeige.R     |  25 ++
 tests/example_RunModel_CemaNeigeGR4J.R |  31 ++
 tests/example_RunModel_CemaNeigeGR5J.R |  31 ++
 tests/example_RunModel_CemaNeigeGR6J.R |  31 ++
 tests/example_RunModel_GR4J.R          |  28 ++
 tests/example_RunModel_GR5J.R          |  28 ++
 tests/example_RunModel_GR6J.R          |  28 ++
 tests/example_TransfoParam.R           |  15 +
 tests/example_TransfoParam_CemaNeige.R |  15 +
 tests/example_TransfoParam_GR4J.R      |  15 +
 tests/example_TransfoParam_GR5J.R      |  15 +
 tests/example_TransfoParam_GR6J.R      |  15 +
 tests/example_plot_OutputsModel.R      |  54 +++
 124 files changed, 10194 insertions(+), 281 deletions(-)
 delete mode 100644 INDEX
 delete mode 100644 MD5
 delete mode 100644 Meta/Rd.rds
 delete mode 100644 Meta/data.rds
 delete mode 100644 Meta/hsearch.rds
 delete mode 100644 Meta/links.rds
 delete mode 100644 Meta/nsInfo.rds
 delete mode 100644 Meta/package.rds
 create mode 100644 R/BasinData.R
 create mode 100644 R/Calibration.R
 create mode 100644 R/Calibration_HBAN.R
 create mode 100644 R/Calibration_optim.R
 create mode 100644 R/CreateCalibOptions.R
 create mode 100644 R/CreateInputsCrit.R
 create mode 100644 R/CreateInputsModel.R
 create mode 100644 R/CreateRunOptions.R
 create mode 100644 R/DataAltiExtrapolation_HBAN.R
 create mode 100644 R/ErrorCrit.R
 create mode 100644 R/ErrorCrit_KGE.R
 create mode 100644 R/ErrorCrit_KGE2.R
 create mode 100644 R/ErrorCrit_NSE.R
 create mode 100644 R/ErrorCrit_RMSE.R
 create mode 100644 R/PEdaily_Oudin.R
 create mode 100644 R/RunModel.R
 create mode 100644 R/RunModel_CemaNeige.R
 create mode 100644 R/RunModel_CemaNeigeGR4J.R
 create mode 100644 R/RunModel_CemaNeigeGR5J.R
 create mode 100644 R/RunModel_CemaNeigeGR6J.R
 create mode 100644 R/RunModel_GR4J.R
 create mode 100644 R/RunModel_GR5J.R
 create mode 100644 R/RunModel_GR6J.R
 create mode 100644 R/TransfoParam.R
 create mode 100644 R/TransfoParam_CemaNeige.R
 create mode 100644 R/TransfoParam_GR4J.R
 create mode 100644 R/TransfoParam_GR5J.R
 create mode 100644 R/TransfoParam_GR6J.R
 delete mode 100644 R/airGR
 delete mode 100644 R/airGR.rdb
 delete mode 100644 R/airGR.rdx
 create mode 100644 R/plot_OutputsModel.R
 create mode 100644 airGR.Rproj
 delete mode 100644 help/AnIndex
 delete mode 100644 help/airGR.rdb
 delete mode 100644 help/airGR.rdx
 delete mode 100644 help/aliases.rds
 delete mode 100644 help/paths.rds
 delete mode 100644 html/00Index.html
 delete mode 100644 html/R.css
 create mode 100644 man/BasinInfo.Rd
 create mode 100644 man/BasinObs.Rd
 create mode 100644 man/Calibration.Rd
 create mode 100644 man/Calibration_HBAN.Rd
 create mode 100644 man/Calibration_optim.Rd
 create mode 100644 man/CreateCalibOptions.Rd
 create mode 100644 man/CreateInputsCrit.Rd
 create mode 100644 man/CreateInputsModel.Rd
 create mode 100644 man/CreateRunOptions.Rd
 create mode 100644 man/DataAltiExtrapolation_HBAN.Rd
 create mode 100644 man/ErrorCrit.Rd
 create mode 100644 man/ErrorCrit_KGE.Rd
 create mode 100644 man/ErrorCrit_KGE2.Rd
 create mode 100644 man/ErrorCrit_NSE.Rd
 create mode 100644 man/ErrorCrit_RMSE.Rd
 create mode 100644 man/PEdaily_Oudin.Rd
 create mode 100644 man/RunModel.Rd
 create mode 100644 man/RunModel_CemaNeige.Rd
 create mode 100644 man/RunModel_CemaNeigeGR4J.Rd
 create mode 100644 man/RunModel_CemaNeigeGR5J.Rd
 create mode 100644 man/RunModel_CemaNeigeGR6J.Rd
 create mode 100644 man/RunModel_GR4J.Rd
 create mode 100644 man/RunModel_GR5J.Rd
 create mode 100644 man/RunModel_GR6J.Rd
 create mode 100644 man/TransfoParam.Rd
 create mode 100644 man/TransfoParam_CemaNeige.Rd
 create mode 100644 man/TransfoParam_GR4J.Rd
 create mode 100644 man/TransfoParam_GR5J.Rd
 create mode 100644 man/TransfoParam_GR6J.Rd
 create mode 100644 man/airGR.Rd
 create mode 100644 man/plot_OutputsModel.Rd
 rename {libs/i386 => src-i386}/airGR.dll (98%)
 create mode 100644 src-i386/frun_CEMANEIGE.f
 create mode 100644 src-i386/frun_CEMANEIGE.o
 create mode 100644 src-i386/frun_GR4J.f
 create mode 100644 src-i386/frun_GR4J.o
 create mode 100644 src-i386/frun_GR5J.f
 create mode 100644 src-i386/frun_GR5J.o
 create mode 100644 src-i386/frun_GR6J.f
 create mode 100644 src-i386/frun_GR6J.o
 create mode 100644 src-i386/utils.f
 create mode 100644 src-i386/utils.o
 create mode 100644 src-x64/airGR.dll
 create mode 100644 src-x64/frun_CEMANEIGE.f
 create mode 100644 src-x64/frun_CEMANEIGE.o
 create mode 100644 src-x64/frun_GR4J.f
 create mode 100644 src-x64/frun_GR4J.o
 create mode 100644 src-x64/frun_GR5J.f
 create mode 100644 src-x64/frun_GR5J.o
 create mode 100644 src-x64/frun_GR6J.f
 create mode 100644 src-x64/frun_GR6J.o
 create mode 100644 src-x64/utils.f
 create mode 100644 src-x64/utils.o
 create mode 100644 src/frun_CEMANEIGE.f
 create mode 100644 src/frun_GR4J.f
 create mode 100644 src/frun_GR5J.f
 create mode 100644 src/frun_GR6J.f
 create mode 100644 src/utils.f
 create mode 100644 tests/example_Calibration.R
 create mode 100644 tests/example_Calibration_HBAN.R
 create mode 100644 tests/example_Calibration_optim.R
 create mode 100644 tests/example_ErrorCrit.R
 create mode 100644 tests/example_RunModel.R
 create mode 100644 tests/example_RunModel_CemaNeige.R
 create mode 100644 tests/example_RunModel_CemaNeigeGR4J.R
 create mode 100644 tests/example_RunModel_CemaNeigeGR5J.R
 create mode 100644 tests/example_RunModel_CemaNeigeGR6J.R
 create mode 100644 tests/example_RunModel_GR4J.R
 create mode 100644 tests/example_RunModel_GR5J.R
 create mode 100644 tests/example_RunModel_GR6J.R
 create mode 100644 tests/example_TransfoParam.R
 create mode 100644 tests/example_TransfoParam_CemaNeige.R
 create mode 100644 tests/example_TransfoParam_GR4J.R
 create mode 100644 tests/example_TransfoParam_GR5J.R
 create mode 100644 tests/example_TransfoParam_GR6J.R
 create mode 100644 tests/example_plot_OutputsModel.R

diff --git a/INDEX b/INDEX
deleted file mode 100644
index 44daa535..00000000
--- a/INDEX
+++ /dev/null
@@ -1,56 +0,0 @@
-BasinInfo               Data sample: characteristics of a fictional
-                        catchment (L0123001, L0123002 or L0123003)
-BasinObs                Data sample: time series of observations of a
-                        fictional catchment (L0123001, L0123002 or
-                        L0123003)
-Calibration             Calibration algorithm which minimises an error
-                        criterion on the model outputs using the
-                        provided functions
-Calibration_HBAN        Calibration algorithm which minimises the error
-                        criterion using the Irstea-HBAN procedure
-Calibration_optim       Calibration algorithm which minimises the error
-                        criterion using the stats::optim function
-CreateCalibOptions      Creation of the CalibOptions object required to
-                        the Calibration functions
-CreateInputsCrit        Creation of the InputsCrit object required to
-                        the ErrorCrit functions
-CreateInputsModel       Creation of the InputsModel object required to
-                        the RunModel functions
-CreateRunOptions        Creation of the RunOptions object required to
-                        the RunModel functions
-DataAltiExtrapolation_HBAN
-                        Altitudinal extrapolation of precipitation and
-                        temperature series
-ErrorCrit               Error criterion using the provided function
-ErrorCrit_KGE           Error criterion based on the KGE formula
-ErrorCrit_KGE2          Error criterion based on the KGE' formula
-ErrorCrit_NSE           Error criterion based on the NSE formula
-ErrorCrit_RMSE          Error criterion based on the RMSE
-PEdaily_Oudin           Computation of daily series of potential
-                        evapotranspiration with Oudin's formula
-RunModel                Run with the provided hydrological model
-                        function
-RunModel_CemaNeige      Run with the CemaNeige snow module
-RunModel_CemaNeigeGR4J
-                        Run with the CemaNeigeGR4J hydrological model
-RunModel_CemaNeigeGR5J
-                        Run with the CemaNeigeGR5J hydrological model
-RunModel_CemaNeigeGR6J
-                        Run with the CemaNeigeGR6J hydrological model
-RunModel_GR4J           Run with the GR4J hydrological model
-RunModel_GR5J           Run with the GR5J hydrological model
-RunModel_GR6J           Run with the GR6J hydrological model
-TransfoParam            Transformation of the parameters using the
-                        provided function
-TransfoParam_CemaNeige
-                        Transformation of the parameters from the
-                        CemaNeige module
-TransfoParam_GR4J       Transformation of the parameters from the GR4J
-                        model
-TransfoParam_GR5J       Transformation of the parameters from the GR5J
-                        model
-TransfoParam_GR6J       Transformation of the parameters from the GR6J
-                        model
-airGR                   Modelling tools used at Irstea-HBAN (France),
-                        including GR4J, GR5J, GR6J and CemaNeige
-plot_OutputsModel       Default preview of model outputs
diff --git a/MD5 b/MD5
deleted file mode 100644
index 1f4bcc9a..00000000
--- a/MD5
+++ /dev/null
@@ -1,23 +0,0 @@
-dc740898c129f840d12d222a2ead106d *DESCRIPTION
-eacf8601006227c3c02bcfaf97cbdc0e *INDEX
-f06c85e4eb89b267cfb165274067c4e8 *Meta/Rd.rds
-32a1c5de93e3b6254dbd86b07ba073ba *Meta/data.rds
-e5a11fd9f38a3bf1d0dadd7840a739f7 *Meta/hsearch.rds
-a1d82a0c2244a09e38104c219298794a *Meta/links.rds
-3b9ab8f86ffaa46a406cb5352028ef27 *Meta/nsInfo.rds
-7ecce7e1cc77345bfed1ac9c9b04e61d *Meta/package.rds
-52ca795872157b1a3e2b6f6bfbc480e0 *NAMESPACE
-ebf0fc819595d631b8bf280c4b049940 *R/airGR
-fca9fb51c6dd9ac775dbba00d895d0a7 *R/airGR.rdb
-9362eca21ff55ff6e7866a8653c5371e *R/airGR.rdx
-63a6f712183a364edfac4df460e83c4b *data/L0123001.rda
-aa6993b50e8a59fb4b37c8eb92df6760 *data/L0123002.rda
-cd27feeac8c19aad0c511b33010ea9ed *data/L0123003.rda
-c067204cb6e5b9db41af38aa96b519b0 *help/AnIndex
-a55d619bb922901e93a88bc0cd44fa4a *help/airGR.rdb
-efdee1c7837ed1b695a529e17fa09725 *help/airGR.rdx
-228f1599718d0523f25967469dcfbb61 *help/aliases.rds
-d312909d7d245fe60010b0b763b00f13 *help/paths.rds
-592202faa3a70495a0bf299af2596ac4 *html/00Index.html
-444535b9cb76ddff1bab1e1865a3fb14 *html/R.css
-0b6e15e196f42c1f59b5b95fc0fad2b9 *libs/i386/airGR.dll
diff --git a/Meta/Rd.rds b/Meta/Rd.rds
deleted file mode 100644
index 8bf1bca97a0b3411a2e9ab9b50096efe7101fcbf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1288
zcmV+j1^4<NiwFP!000002JINzZW~3^<RY9lfk0cNB2^3ssflo+B&{tJ@sc`D2qhPp
zP{C6)-kr6l?CvbH;~2m3tNaMz%z9^cX7*y2@_;B(HeR3moa-F_bg$89EH#$lSz3nI
z<p=Pu3C|`xpEXt*Yw)@L0>?Bw3q7{mcT?E?1a>)ybI=D}?9&0qg0e7&KG2{y-@Z7y
z$Wae<6pI86a@?aXCs>e#;xdvHu`V+~o`um^#9dB>E>lCDGne=Uw*ELQNPKdP1wQfx
z?foV=j+kF&?|P4O#!Y>j8SLieX)lL=WWWzf87_V(XXu~nh|Q~>i>W`oxg5JxbL@RM
zhjqY53Ut#Y0lpw~NOI)kBJ#BV{JS{>?Rf+pjbJk)FeU5ob_HCQ^WineVeGLh%(0de
zk9Ba_5g!@^rVTc(U4zqYX=2Jx`x<TJGXb#>MuM3Ivz8T%5~8X_#ZJq7<qNw`R9+N{
zBt?8&tdLBURUVlryEaUQyf9Mur`1)VPMT$H3fM66UUdeu7>cA&2}M#_28z_E0p(Pc
zJ<1`)^h`0Il&5|jwq1+uDC~xj@g=}^88BmC*Aq`EEYETk!$OKzAlg-kO!;b(*@~)=
z)>clhxR47a?~VWH=lc<Me!-dF8<sm>$<jbE4kDi%B4-57bp+uw7SxFm^AJWJb!53<
zA30b!qkx10ZGFGDfADN?Z@-1ow*$nudVjW^N*@@~q2>vSK{!byvjM!{CZ+iHnqF(|
z1z~^4pz=lmnvAG3LIDkFKx0sgLqud@A_wqb2@u1d7!ef6TtRG>IA{!QZkWI$&Tgqo
zT;z>IM{g=WFQ!q-uvO;L&v+~d-jSV1YI2A>=H#DL5DP5g!^5QEW=BXBoF(lt@qw2R
z>pd94^O`sUaq{b!ayY+WIZbMm?UJ4?FmK&e;<7fmsIc={oXVxC-c%5FYzxb0#2d>x
zl9NQp1`dfz^ob&cN1Qk`q9P4j2=Yh}5%3s9HqHK2&{w_6uobc{W!bV>1~>+)G>2g*
zA&>E3?5nP}J&*pW#Za#R=9@+Tc`dy*`mVYxfcRy8O6H)}4I(C>+^KZwEjU!jW*^Zs
z(I$}jD4Cg0W6OYjh|>&j_-!<GIrG_&Iv_DH;+QgiVK8R%3B@6sNRF|u3UQ~LQVy*W
zJ@c5_e}}14!}O)WRBx3{TW5?-TW7;J>2T(OQDu>w)dVu5wxgyp4(H17I18+38G(Af
zxP-(_`U&2MxBV8p9h3J}(q#O^IgI(zQQ#UZjM1=l0ty_m-9j{Ud|3y><OHq6mex$F
z>^1f^3mp>=k9{HA(k&$uX__(Vtn0w)kJl$VU;qE*U-1Pt{UkKA5WQDi%1lJQoSATA
zNi$K!WzEEwENv!1+45$qu$MSnMPZpM6`(D3CcbXDvpknCc_zYI_DrO`^i{IT<*$-8
znS>UrxeQvt%$7pS;U&wVNl~>VE<n{@h^k{#S<7QJvLN4DCQYQdR9c2rESFYp6_?C<
zf`Wl1OQ%VYE}s@x*%GSPa^oHRd>7BJ65>g^gtxLA)U-95!*cNFOe;$o(`pE}2i5JG
z>L-g6nq7BRE`UJ2Ur!_TzIshXM%3(u4wDxK^?SgPPvMHLc93S5!NnpH+4q-ZI$_+6
yEo0U=o9rrsHsD$M9sb?j-Th%(?f5vhd-Of|L(8rwuS4+d&%Xeyz22j)7XSc|&}<F>

diff --git a/Meta/data.rds b/Meta/data.rds
deleted file mode 100644
index 216de635f65820f8e7827f455b266dfe5a43f744..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 200
zcmV;(05|_1iwFP!000002JMr*3c@fDfX}uFih`gIaHE1le>O*P5d=4Jy~dOVnnar5
z<BMr&l~U>hh(mG*AAH|**C_ya;JfGf)w*!s3<8+Ax!RKv>Zme}>r)uTNf<_(VHSU3
zNz0ZsJEx|v?4x)Xy@i(pSwchdUho~VoJwMrm%>=V4C)LCGr_FTiV9?8SuVM<pZXTt
z80r##$)0xXR!EM<$$4$osoNh^x&NhZ2?EcRMorPb3F*eXz7v3PGoLTqq-AD00{{T1
CC0uy`

diff --git a/Meta/hsearch.rds b/Meta/hsearch.rds
deleted file mode 100644
index 2c0c5a9b235d2df56a725f881ae7d3fa14dbed3d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1148
zcmV-?1cUn@iwFP!000002JKi~Z`(E$RqPZ=x@BlOpbrCzal?Qnm;=Oe>}J7UQpe4_
zHi?n7#r7}+v`pLVBvGTNxcRC5GwUuXl9psgan}JWIs+DbdA|;Id3h-5*Sn76RGcbY
zl`4qNmvF6u>K^>R1!)8R?_kPLE|!CjXyE)$|5xfpaE;I~!oCrjMraw~u@Mf8@PigA
z^*t-qt>jv%VWoX5HLcXL(qk(fSjl3z7Q?j|uElUIhHEigi{V-f*J8L9!?hR<i_tI`
z8&7ad!)`caTCuJa=lxiZKWk&3_Bj@mg<5qlqq_X*$<dkCZ)No?5;V|;`)y9JAj*6m
zNpoydDN8qu5)rpK6*g5yf64~L&j(y2VLs7U$5`MaU(n7Q!Ewa=nb~c0IA=VAv1t{T
z&rUj8`9)6Y&bprcGRO7e)M__-odKr)_2qdopr&H$FyHK5+&AOPHVN<<p(CO#4`wYV
z7yCb#S(~NSma%SHYbIe<*_@}e;h(?YIE;s^hdDOu`XH;Dxs|P)H3M2SG;cCk@Eosg
zMLrWyUQz6gSF#6CjDyH0hsYa47EcgPV?n(bu_3}}NIlsX*hd}~-Z&tkK-<sv>TY9i
zuU<o1auMT3ZtUpn{akivZh~S+PE=;r2l-0%+=nB*&g>(E{Sku}8wY4IrrsC@G^7EI
z0Tzdd$PPpv*kLB%3_md@D3C=#EUgeqU_XzPKH}_(4#)rvlhDiVp5GQjlsSr!)9hUy
z3xap$mXk;x86=$in*g!EB0fA+%wlgr19TNHs2U8FbCzsid0rDwAWr^FD2MwOZ0e&Y
zRV+!Tm~hHbH>I<DuxPT=be-mBGn;TG*>N%1lnmcH*O8=5A(;vqm1L<?CXYDrXhelx
zwh;1>AR<sPSXtfuI??x?8<%aS>vYI=F{F=U@X|dD?2Cqs2Z@ih|ITgxj|u_h06^pg
z|8GkDGaTP*vjEo5)=3e5h7BSnV7pUU(km#akgOI_-Dnf&e54MCM{!{Sby%m=o~zsV
zdcc{_M%06hL2ey&;J3LzOT;J+*+fPpzS)So^F1Xy&%wDZsQFKVS|vf><$}s*RrD>J
zOwqS&4nOKshzGe{7Rf`2KxdRPs?KqEYmOmjL1DFW3$?#^234l)9lTd;^8;dA`Pf&A
zWPDW|#(Y^QC=C|5qhb3g0C;4lhG^*davzM;9n{oZYH3!<HO1!%bWDag@r9(ND@rDE
zYPpkc`AEBbr2WJmY45yz@pSiKIru0B&T0h)D_U6{02x4M$=7MPzJ_b9;Ia-bA<$;*
zq#w<s?Jv3Gm2c{^*2CT(*ml_3bK37=G1kLM_gG7-GLe}NJhS=J0gI?-5IdpAB&DWE
z>J#1XOI}>^;wQ$7%Wr(n;@|lG`%lr!fgPw5V&z@o<fx|l%DXuyMb#V)M?QrYQbU8&
zqrn~_Q_eRr52Msnv#&eXwe+D`KBdp}%#CwgS#XZ)&&c(J@xelqbmjm#ivqP7yhKEz
O9O!QxpC#P88UO%_PAbU&

diff --git a/Meta/links.rds b/Meta/links.rds
deleted file mode 100644
index ffb9eaf33fcee20c0f78f728756d0c2bfa881145..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 485
zcmV<B0UG`viwFP!000002Az~kO9L?w$Jai<s+H=&gM#7%^&qW?+k0C}ZKV%Z58g^j
zw;I?N*%b84i`kN_$<A)N75d1|{AM<p%>3VX48tfGMfNQeqh*c#oEasf68+cf4fa8p
z^sL4wb)7~Vh1lzR3%?#ca_lr68_z<SItNq-Ie118#l9zl*E(?e+-{9z`bJCp0mZJ2
z-$I<&h}x^5aS#QCYc{ju`(Ci5VTWM4W-}5!^yjvdC%LusQnqpr=qE%`%b~dYMF|Rg
zC%r=O7Q2M_B)Rv?Y;5|{>&obr9(~B0cJ!J%tu<6xn0C^gBkX)n$IChP^zF&&3+@6o
zhM=Y$+eITAf7mjAmxJ$FkAux)%zwl*2m0c~G081yQ8PcPZr}o-Zv=Va!k-|5T>bH6
zGQIS0%9NPo5!d48X1IFP6M(Ol`iz0&Q`V?7p$bN+!0;^|R`!r<hioBBawS$^ZrB!D
z%b#~8`QxTqQa`!<04ODQ970WuQzg_dPL<R-HQ-OtxcxX=yTnQ3;pc{`A~M{#uPP5j
znZ`ggQWJqHx*>`xI$IP3&K&m~rBA)iYihks;jJn&n_@K6jB)s$+_mC`>9Zy75KK{q
b!_0ETFE6ipT~MIgnepcrjYPxwc?bXi6Gilc

diff --git a/Meta/nsInfo.rds b/Meta/nsInfo.rds
deleted file mode 100644
index 6ff9d4fdd53e86e1ae97491c61469e30994ab991..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 409
zcmV;K0cQRmiwFP!0000027QxTPr@)5hRcRQ#1Re&7sg+q;yum<58;sEg?CHMDmK~L
zrRxm*d9~fT(rrkSQu@5#_x7-_?-u|73)rGtw){I5KRwaqDBD2vYtRN=$z2%X4+c4=
zM4^F!f~SYsQt_e5X~J==gptb-<S3U{iIh`ql`GFA$$08A%(a!l7c@jsHNnqF)#&OG
zayW}P_I8}Xghq|sbv?!?GuCi42wvx&g8d4-X@)L0M?(FDrq0?6A&&OJDhqLWW9MSO
z<|#(yJaADAmk4i>QYKAh?%%zfQl}@?`%-nZY8aYudJO9H%Qpr|`bpQ2!ScIKOx8Hc
zu%a4^)`jVRf?j->M3jpg<%e=8suUPiYgX@((UN0J8J<DRwhVx_WkLdDl&Xvp%Jy?`
zx0G8Y(GEqai+jtTRnhDsO@_68m1R$bcW|6g#>>*}pq)AG7t=N595G$rPLbnAFilYn
zE)f5sp@v0%EwX^s$gvSwTdouCiFmAfPeeSYZ{*XAW1>yFo7-3!io^Z^Zwg62Rs;Y5
Dt_;Tm

diff --git a/Meta/package.rds b/Meta/package.rds
deleted file mode 100644
index b57d7c148cdebf3be368bf036ad0ae0a7b3d8f02..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 752
zcmV<M0uTKkiwFP!000002GvwcPuoBcb{;e#s45bNUiS!6VkIG@6)zPMng#_DnSgpj
zi@ix!ti9ImnutG7JGOU2>_QK{HIg6m?PO-YZ)W_nW?5FzD#2AO!E0#;ZdHJ`;kjj%
ztxb4tU@8WVHYyYBKH@pi=G_(d2xByuBgHwBD3ZiOSfQbiir~hN^RsKT`(5C`C3|&5
z1D8c!>^*Qgmvy)wB=_!R4F?|T5g%U@x{AKhw7=LLZPeP$R;STwHJUArd>r9OkU*i{
z*co4&iZUQNW~phrT=3u<P0F%o;<S#&j6P8!Q2%0dHXPhu)Q)+I*gy%>c|_LSP0E^s
zc27^xzTLE2dns5rnJ%bAVJZxI5Wr6YRmG8m)PkVJvnM#?bLwJ-{5J%vA^5!`nvJFq
z!URtRBoayTL<EF$IXHzX!Ym0QFb!syv4)5OKAWZ4B#On2E5TB7mtqAynni)DC=Vo>
zaS<O<fuKJ6AaD$)CBfgw6J}8Y)!*+P%5=|0w-Q(r7VajavzG*m(-<1Sz!fx%quQp|
zgUP7T*2a;ODBM0mbpLC&vFvslKIC2Q17gOYeSq5S!)Eue(?Yk?-Vs{Tz~f74S>+;x
zD44hb_6dO2`bg)dxIBFhS2H)IiW#GFM}&kTjb9(6)9)Y7BDLVc4CfUHuizpEsq{%m
z0#9mltN%*bc#Nn^0=Y_j9#N*?<puUH-ovuq$3i@J@p9_RN_IBK(q+(F&9bDyZRcJ-
z!$kS_PZ=7YbQ|(;5cxz<cLgV<BoR%T?R-0O=bztcPR^~8X;tBuJ}&Fyg8A4~Ck!i?
z8~-i+$2ThO+N)lrTowqE1&XI9f04A1R#P<96#qr73?I{nay){j1|Av_vNG$k{(mM3
z11lH6T4QPb`ONrMS1WUI({qNC>2URN*E^!8!|^gJwrOnh70In&^(LCniB!g}4E>Oc
imAN^h!6Qudl;`9#qVH(=);2kw|CirqVsSb}2LJ$rENGwr

diff --git a/R/BasinData.R b/R/BasinData.R
new file mode 100644
index 00000000..b1e6d222
--- /dev/null
+++ b/R/BasinData.R
@@ -0,0 +1,42 @@
+#' @name BasinInfo
+#' @docType data
+#' @title Data sample: characteristics of a fictional catchment (L0123001, L0123002 or L0123003)
+#' @description
+#' R-object containing the code, station's name, area and hypsometric curve of the catchment.
+#' @encoding UTF-8
+#' @format
+#' List named 'BasinInfo' containing
+#' \itemize{
+#' \item two strings: catchment's code and station's name
+#' \item one float: catchment's area in km2
+#' \item one numeric vector: catchment's hypsometric curve (min, quantiles 01 to 99 and max) in metres
+#' }
+#' @examples 
+#'    require(airGR)
+#'    data(L0123001)
+#'    str(BasinInfo)
+
+NULL
+
+
+#' @name BasinObs
+#' @docType data
+#' @title Data sample: time series of observations of a fictional catchment (L0123001, L0123002 or L0123003)
+#' @description
+#' R-object containing the times series of precipitation, temperature, potential evapotranspiration and discharges. \cr
+#' Times series for L0123001 or L0123002 are at the daily time-step for use with daily models such as GR4J, GR5J, GR6J, CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J.
+#' Times series for L0123003 are at the hourly time-step for use with hourly models such as GR4H.
+#' @encoding UTF-8
+#' @format
+#' Data frame named 'BasinObs' containing
+#' \itemize{
+#' \item one POSIXlt vector: time series dates in the POSIXlt format
+#' \item five numeric vectors: time series of catchment average precipitation [mm], catchment average air temperature [degC], catchment average potential evapotranspiration [mm], outlet discharge [l/s], outlet discharge [mm]
+#' }
+#' @examples 
+#'    require(airGR)
+#'    data(L0123001)
+#'    str(BasinObs)
+
+NULL
+
diff --git a/R/Calibration.R b/R/Calibration.R
new file mode 100644
index 00000000..874740b5
--- /dev/null
+++ b/R/Calibration.R
@@ -0,0 +1,29 @@
+#*************************************************************************************************
+#' Calibration algorithm which minimises the error criterion using the provided functions. \cr
+#*************************************************************************************************
+#' @title  Calibration algorithm which minimises an error criterion on the model outputs using the provided functions
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{Calibration_HBAN}}, \code{\link{Calibration_optim}},
+#'          \code{\link{RunModel}}, \code{\link{ErrorCrit}}, \code{\link{TransfoParam}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, 
+#'          \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}.
+#' @example tests/example_Calibration.R
+#' @export
+#' @encoding UTF-8
+#_FunctionInputs__________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  InputsCrit          [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  CalibOptions        [object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details
+#' @param  FUN_MOD             [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
+#' @param  FUN_CRIT            [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)
+#' @param  FUN_CALIB           (optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN
+#' @param  FUN_TRANSFO         (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined
+#' @param  quiet               (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________
+#' @return  [list] see \code{\link{Calibration_HBAN}} or \code{\link{Calibration_optim}} 
+#**************************************************************************************************
+Calibration <- function(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_CALIB=Calibration_HBAN,FUN_TRANSFO=NULL,quiet=FALSE){
+    return( FUN_CALIB(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO,quiet=quiet) )
+}
+
diff --git a/R/Calibration_HBAN.R b/R/Calibration_HBAN.R
new file mode 100644
index 00000000..97e631f5
--- /dev/null
+++ b/R/Calibration_HBAN.R
@@ -0,0 +1,401 @@
+#*************************************************************************************************
+#' Calibration algorithm which minimises the error criterion. \cr
+#' \cr
+#' The algorithm is based on a local search procedure. 
+#' First, a screening is performed using either a rough predefined grid or a list of parameter sets
+#' and then a simple steepest descent local search algorithm is performed.
+#' 
+#' A screening is first performed either from a rough predefined grid (considering various initial 
+#' values for each paramete) or from a list of initial parameter sets. \cr
+#' The best set identified in this screening is then used as a starting point for the steepest 
+#' descent local search algorithm. \cr
+#' For this search, the parameters are used in a transformed version, to obtain uniform           
+#' variation ranges (and thus a similar pace), while the true ranges might be quite different. \cr
+#' At each iteration, we start from a parameter set of NParam values (NParam being the number of 
+#' free parameters of the chosen hydrological model) and we determine the 2*NParam-1 new candidates 
+#' by changing one by one the different parameters (+/- pace). \cr
+#' All these candidates are tested and the best one kept to be the starting point for the next    
+#' iteration. At the end of each iteration, the pace is either increased or decreased to adapt    
+#' the progression speed. A diagonal progress can occasionally be done.                        \cr
+#' The calibration algorithm stops when the pace becomes too small.                            \cr
+#'
+#' To optimise the exploration of the parameter space, transformation functions are used to convert
+#' the model parameters. This is done using the TransfoParam functions.
+#*************************************************************************************************
+#' @title  Calibration algorithm which minimises the error criterion using the Irstea-HBAN procedure
+#' @author Laurent Coron (August 2013)
+#' @references
+#'   Michel, C. (1991),
+#'        Hydrologie appliquée aux petits bassins ruraux, Hydrology handout (in French), Cemagref, Antony, France.
+#' @example tests/example_Calibration_HBAN.R
+#' @seealso \code{\link{Calibration}}, \code{\link{Calibration_optim}},
+#'          \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, 
+#'          \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}.
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  InputsCrit          [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  CalibOptions        [object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details
+#' @param  FUN_MOD             [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
+#' @param  FUN_CRIT            [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)
+#' @param  FUN_TRANSFO         (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined
+#' @param  quiet               (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:
+#'          \tabular{ll}{
+#'          \emph{$ParamFinalR  }  \tab   [numeric] parameter set obtained at the end of the calibration \cr
+#'          \emph{$CritFinal    }  \tab   [numeric] error criterion obtained at the end of the calibration \cr
+#'          \emph{$NIter        }  \tab   [numeric] number of iterations during the calibration \cr
+#'          \emph{$NRuns        }  \tab   [numeric] number of model runs done during the calibration \cr
+#'          \emph{$HistParamR   }  \tab   [numeric] table showing the progression steps in the search for optimal set: parameter values \cr
+#'          \emph{$HistCrit     }  \tab   [numeric] table showing the progression steps in the search for optimal set: criterion values \cr
+#'          \emph{$MatBoolCrit  }  \tab   [boolean] table giving the requested and actual time steps when the model is calibrated \cr
+#'          \emph{$CritName     }  \tab   [character] name of the calibration criterion \cr
+#'          \emph{$CritBestValue}  \tab   [numeric] theoretical best criterion value \cr
+#'          }
+#**************************************************************************************************
+Calibration_HBAN <- function(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO=NULL,quiet=FALSE){
+
+
+##_____Arguments_check_____________________________________________________________________
+    if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+    if(inherits(RunOptions,"RunOptions")==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); }  
+    if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); }  
+    if(inherits(CalibOptions,"CalibOptions")==FALSE){ stop("CalibOptions must be of class 'CalibOptions' \n"); return(NULL); }  
+    if(inherits(CalibOptions,"HBAN")==FALSE){ stop("CalibOptions must be of class 'HBAN' if Calibration_HBAN is used \n"); return(NULL); }  
+
+
+   ##_check_FUN_TRANSFO
+    if(is.null(FUN_TRANSFO)){
+      if(identical(FUN_MOD,RunModel_GR4J         )){ FUN_TRANSFO <- TransfoParam_GR4J     ; }
+      if(identical(FUN_MOD,RunModel_GR5J         )){ FUN_TRANSFO <- TransfoParam_GR5J     ; }
+      if(identical(FUN_MOD,RunModel_GR6J         )){ FUN_TRANSFO <- TransfoParam_GR6J     ; }
+      if(identical(FUN_MOD,RunModel_CemaNeige    )){ FUN_TRANSFO <- TransfoParam_CemaNeige; }
+      if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){
+        if(identical(FUN_MOD,RunModel_CemaNeigeGR4J)){ FUN1 <- TransfoParam_GR4J; FUN2 <- TransfoParam_CemaNeige; }
+        if(identical(FUN_MOD,RunModel_CemaNeigeGR5J)){ FUN1 <- TransfoParam_GR5J; FUN2 <- TransfoParam_CemaNeige; }
+        if(identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ FUN1 <- TransfoParam_GR6J; FUN2 <- TransfoParam_CemaNeige; }
+        FUN_TRANSFO <- function(ParamIn,Direction){
+          Bool <- is.matrix(ParamIn);
+          if(Bool==FALSE){ ParamIn <- rbind(ParamIn); }
+          ParamOut <- NA*ParamIn;
+          NParam   <- ncol(ParamIn);
+          ParamOut[,         1:(NParam-2)] <- FUN1(ParamIn[,         1:(NParam-2)],Direction);
+          ParamOut[,(NParam-1):NParam    ] <- FUN2(ParamIn[,(NParam-1):NParam    ],Direction);
+          if(Bool==FALSE){ ParamOut <- ParamOut[1,]; }
+          return(ParamOut);
+        }
+      }
+      if(is.null(FUN_TRANSFO)){ stop("FUN_TRANSFO was not found (in Calibration function) \n"); return(NULL);  }
+    }
+
+    ##_variables_initialisation 
+    ParamFinalR <- NULL; ParamFinalT <- NULL; CritFinal <- NULL;
+    NRuns <- 0; NIter <- 0;
+    if("StartParamDistrib" %in% names(CalibOptions)){ PrefilteringType <- 2; } else { PrefilteringType <- 1; }
+    if(PrefilteringType==1){ NParam <- ncol(CalibOptions$StartParamList); }
+    if(PrefilteringType==2){ NParam <- ncol(CalibOptions$StartParamDistrib); }
+    if(NParam>20){ stop("Calibration_HBAN can handle a maximum of 20 parameters \n"); return(NULL);  }
+    HistParamR    <- matrix(NA,nrow=500*NParam,ncol=NParam);
+    HistParamT    <- matrix(NA,nrow=500*NParam,ncol=NParam);
+    HistCrit      <- matrix(NA,nrow=500*NParam,ncol=1);
+    CritName      <- NULL;
+    CritBestValue <- NULL;
+    Multiplier    <- NULL;
+    CritOptim     <- +1E100;
+    ##_temporary_change_of_Outputs_Sim
+    RunOptions$Outputs_Sim <- RunOptions$Outputs_Cal;  ### this reduces the size of the matrix exchange with fortran and therefore speeds the calibration
+
+
+
+##_____Parameter_Grid_Screening____________________________________________________________
+
+
+    ##Definition_of_the_function_creating_all_possible_parameter_sets_from_different_values_for_each_parameter
+    ProposeCandidatesGrid <- function(DistribParam){
+      ##Managing_matrix_sizes
+        Nvalmax <- nrow(DistribParam);
+        NParam <- ncol(DistribParam);
+        ##we_add_columns_to_MatDistrib_until_it_has_20_columns
+        DistribParam2 <- matrix(NA,nrow=Nvalmax,ncol=20);
+        DistribParam2[1:Nvalmax,1:NParam] <- DistribParam;
+        ##we_check_the_number_of_values_to_test_for_each_param
+        NbDistrib <- rep(1,20);
+        for(iC in 1:20){ NbDistrib[iC] <- max( 1 , Nvalmax-sum(is.na(DistribParam2[,iC])) ); }
+      ##Loop_on_the_various_values_to_test ###(if 4 param and 3 values for each => 3^4 sets)
+      ##NB_we_always_do_20_loops ###which_is_here_the_max_number_of_param_that_can_be_optimised
+        VECT <- NULL;
+        for(iL01 in 1:NbDistrib[01]){ for(iL02 in 1:NbDistrib[02]){ for(iL03 in 1:NbDistrib[03]){ for(iL04 in 1:NbDistrib[04]){ for(iL05 in 1:NbDistrib[05]){ 
+        for(iL06 in 1:NbDistrib[06]){ for(iL07 in 1:NbDistrib[07]){ for(iL08 in 1:NbDistrib[08]){ for(iL09 in 1:NbDistrib[09]){ for(iL10 in 1:NbDistrib[10]){
+        for(iL11 in 1:NbDistrib[11]){ for(iL12 in 1:NbDistrib[12]){ for(iL13 in 1:NbDistrib[13]){ for(iL14 in 1:NbDistrib[14]){ for(iL15 in 1:NbDistrib[15]){ 
+        for(iL16 in 1:NbDistrib[16]){ for(iL17 in 1:NbDistrib[17]){ for(iL18 in 1:NbDistrib[18]){ for(iL19 in 1:NbDistrib[19]){ for(iL20 in 1:NbDistrib[20]){
+          VECT <- c(VECT,                         
+            DistribParam2[iL01,01],DistribParam2[iL02,02],DistribParam2[iL03,03],DistribParam2[iL04,04],DistribParam2[iL05,05],
+            DistribParam2[iL06,06],DistribParam2[iL07,07],DistribParam2[iL08,08],DistribParam2[iL09,09],DistribParam2[iL10,10],
+            DistribParam2[iL11,11],DistribParam2[iL12,12],DistribParam2[iL13,13],DistribParam2[iL14,14],DistribParam2[iL15,15],
+            DistribParam2[iL16,16],DistribParam2[iL17,17],DistribParam2[iL18,18],DistribParam2[iL19,19],DistribParam2[iL20,20]);
+        } } } } }
+        } } } } }
+        } } } } }
+        } } } } }
+        MAT <- matrix(VECT,ncol=20,byrow=TRUE)[,1:NParam];
+        if(is.matrix(MAT)==FALSE){ MAT <- cbind(MAT); }
+        Output <- NULL;
+        Output$NewCandidates <- MAT;
+        return(Output);
+    }
+
+
+    ##Creation_of_new_candidates_______________________________________________
+    if(PrefilteringType==1){ CandidatesParamR <- CalibOptions$StartParamList; }
+    if(PrefilteringType==2){ DistribParamR <- CalibOptions$StartParamDistrib; DistribParamR[,!CalibOptions$OptimParam] <- NA; CandidatesParamR <- ProposeCandidatesGrid(DistribParamR)$NewCandidates; }
+    ##Remplacement_of_non_optimised_values_____________________________________
+    CandidatesParamR <- apply(CandidatesParamR,1,function(x){ x[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam]; return(x); });
+    if(NParam>1){ CandidatesParamR <- t(CandidatesParamR); } else { CandidatesParamR <- cbind(CandidatesParamR); }
+
+    ##Loop_to_test_the_various_candidates______________________________________
+    iNewOptim <- 0;
+    Ncandidates <- nrow(CandidatesParamR);    
+    if(!quiet & Ncandidates>1){
+      if(PrefilteringType==1){ cat(paste("\t List-Screening in progress (",sep="")); }
+      if(PrefilteringType==2){ cat(paste("\t Grid-Screening in progress (",sep="")); }
+      cat("0%");
+    }
+    for(iNew in 1:nrow(CandidatesParamR)){
+      if(!quiet & Ncandidates>1){
+        for(k in c(2,4,6,8)){ if(iNew==round(k/10*Ncandidates)){ cat(paste(" ",10*k,"%",sep="")); } } 
+      }
+      ##Model_run
+      Param <- CandidatesParamR[iNew,];
+      OutputsModel <- FUN_MOD(InputsModel,RunOptions,Param);
+      ##Calibration_criterion_computation
+      OutputsCrit <- FUN_CRIT(InputsCrit,OutputsModel);      
+      if(!is.na(OutputsCrit$CritValue)){ if(OutputsCrit$CritValue*OutputsCrit$Multiplier < CritOptim){
+        CritOptim <- OutputsCrit$CritValue*OutputsCrit$Multiplier;
+        iNewOptim <- iNew;
+      } }
+      ##Storage_of_crit_info
+      if(is.null(CritName) | is.null(CritBestValue) | is.null(Multiplier)){
+        CritName      <- OutputsCrit$CritName;
+        CritBestValue <- OutputsCrit$CritBestValue;
+        Multiplier    <- OutputsCrit$Multiplier;
+      }
+    }
+    if(!quiet & Ncandidates>1){ cat(" 100%) \n"); }
+	  
+
+    ##End_of_first_step_Parameter_Screening____________________________________
+    ParamStartR <- CandidatesParamR[iNewOptim,]; if(!is.matrix(ParamStartR)){ ParamStartR <- matrix(ParamStartR,nrow=1); }
+    ParamStartT <- FUN_TRANSFO(ParamStartR,"RT");
+	  CritStart   <- CritOptim;
+    NRuns       <- NRuns+nrow(CandidatesParamR);
+    if(!quiet){
+      if(Ncandidates> 1){ cat(paste("\t Screening completed (",NRuns," runs): \n",sep=""));  }
+      if(Ncandidates==1){ cat(paste("\t Starting point for steepest-descent local search: \n",sep="")); }
+      cat(paste("\t     Param = ",paste(formatC(ParamStartR,format="f",width=8,digits=3),collapse=" , "),"\n",sep=""));
+      cat(paste("\t     Crit ",format(CritName,width=12,justify="left")," = ",formatC(CritStart*Multiplier,format="f",digits=4),"\n",sep=""));
+    }
+    ##Results_archiving________________________________________________________
+    HistParamR[1,] <- ParamStartR;
+    HistParamT[1,] <- ParamStartT;
+    HistCrit[1,]   <- CritStart;
+
+
+
+
+##_____Steepest_Descent_Local_Search_______________________________________________________
+
+
+    ##Definition_of_the_function_creating_new_parameter_sets_through_a_step_by_step_progression_procedure
+    ProposeCandidatesLoc <- function(NewParamOptimT,OldParamOptimT,RangesT,OptimParam,Pace){
+      ##Format_checking
+      if(nrow(NewParamOptimT)!=1 | nrow(OldParamOptimT)!=1){ stop("each input set must be a matrix of one single line \n"); return(NULL); }
+      if(ncol(NewParamOptimT)!=ncol(OldParamOptimT) | ncol(NewParamOptimT)!=length(OptimParam)){ stop("each input set must have the same number of values \n"); return(NULL); }
+      ##Proposal_of_new_parameter_sets ###(local search providing 2*NParam-1 new sets)
+      NParam <- ncol(NewParamOptimT);
+      VECT <- NULL;
+      for(I in 1:NParam){
+        ##We_check_that_the_current_parameter_should_indeed_be_optimised
+        if(OptimParam[I]==TRUE){
+          for(J in 1:2){
+            Sign <- 2*J-3;   #Sign can be equal to -1 or +1
+            ##We_define_the_new_potential_candidate
+            Add <- TRUE;
+            PotentialCandidateT <- NewParamOptimT;
+            PotentialCandidateT[1,I] <- NewParamOptimT[I]+Sign*Pace;
+            ##If_we_exit_the_range_of_possible_values_we_go_back_on_the_boundary
+            if(PotentialCandidateT[1,I]<RangesT[1,I]){ PotentialCandidateT[1,I] <- RangesT[1,I]; }
+            if(PotentialCandidateT[1,I]>RangesT[2,I]){ PotentialCandidateT[1,I] <- RangesT[2,I]; }
+            ##We_check_the_set_is_not_outside_the_range_of_possible_values
+             if( NewParamOptimT[I]==RangesT[1,I] & Sign<0 ){ Add <- FALSE; }
+             if( NewParamOptimT[I]==RangesT[2,I] & Sign>0 ){ Add <- FALSE; }
+            ##We_check_that_this_set_has_not_been_tested_during_the_last_iteration
+            if(identical(PotentialCandidateT,OldParamOptimT)){ Add <- FALSE; }
+            ##We_add_the_candidate_to_our_list
+            if(Add==TRUE){ VECT <- c(VECT,PotentialCandidateT); }
+          }
+        }
+      }
+      Output <- NULL;
+      Output$NewCandidatesT <- matrix(VECT,ncol=NParam,byrow=TRUE);
+      return(Output);
+    }
+      
+
+    ##Initialisation_of_variables
+    if(!quiet){ 
+      cat("\t Steepest-descent local search in progress \n"); 
+    }
+    Pace <- 0.64;
+    PaceDiag <- rep(0,NParam);
+    CLG <- 0.7^(1/NParam);
+    Compt <- 0;
+    CritOptim <- CritStart;
+    ##Conversion_of_real_parameter_values
+    RangesR <- CalibOptions$SearchRanges;
+    RangesT <- FUN_TRANSFO(RangesR,"RT");
+    NewParamOptimT <- ParamStartT;
+    OldParamOptimT <- ParamStartT;
+
+
+    ##START_LOOP_ITER_________________________________________________________
+    for(ITER in 1:(100*NParam)){
+
+
+    ##Exit_loop_when_Pace_becomes_too_small___________________________________
+    if(Pace<0.01){ break; }
+  
+
+    ##Creation_of_new_candidates______________________________________________
+    CandidatesParamT <- ProposeCandidatesLoc(NewParamOptimT,OldParamOptimT,RangesT,CalibOptions$OptimParam,Pace)$NewCandidatesT;
+    CandidatesParamR <- FUN_TRANSFO(CandidatesParamT,"TR");
+    ##Remplacement_of_non_optimised_values_____________________________________
+    CandidatesParamR <- apply(CandidatesParamR,1,function(x){ x[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam]; return(x); });
+    if(NParam>1){ CandidatesParamR <- t(CandidatesParamR); } else { CandidatesParamR <- cbind(CandidatesParamR); }
+
+
+    ##Loop_to_test_the_various_candidates_____________________________________
+    iNewOptim <- 0;
+    for(iNew in 1:nrow(CandidatesParamR)){
+      ##Model_run
+      Param <- CandidatesParamR[iNew,];
+      OutputsModel <- FUN_MOD(InputsModel,RunOptions,Param);
+      ##Calibration_criterion_computation
+      OutputsCrit <- FUN_CRIT(InputsCrit,OutputsModel);      
+      if(!is.na(OutputsCrit$CritValue)){ if(OutputsCrit$CritValue*OutputsCrit$Multiplier < CritOptim){
+        CritOptim <- OutputsCrit$CritValue*OutputsCrit$Multiplier;
+        iNewOptim <- iNew;
+      } }
+    }
+    NRuns <- NRuns+nrow(CandidatesParamR);
+
+
+    ##When_a_progress_has_been_achieved_______________________________________
+    if(iNewOptim!=0){
+      ##We_store_the_optimal_set
+      OldParamOptimT <- NewParamOptimT;
+      NewParamOptimT <- matrix(CandidatesParamT[iNewOptim,1:NParam],nrow=1);
+      Compt <- Compt+1;
+      ##When_necessary_we_increase_the_pace ### if_successive_progress_occur_in_a_row
+      if(Compt>2*NParam){
+        Pace <- Pace*2;
+        Compt <- 0;
+      }
+      ##We_update_PaceDiag
+      VectPace <- NewParamOptimT-OldParamOptimT;
+      for(iC in 1:NParam){ if(CalibOptions$OptimParam[iC]==TRUE){ 
+        if(VectPace[iC]!=0){ PaceDiag[iC] <- CLG*PaceDiag[iC]+(1-CLG)*VectPace[iC]; }
+        if(VectPace[iC]==0){ PaceDiag[iC] <- CLG*PaceDiag[iC]; }
+      } }
+    } else {
+    ##When_no_progress_has_been_achieved_we_decrease_the_pace_________________
+      Pace <- Pace/2;
+      Compt <- 0;
+    }
+
+
+    ##Test_of_an_additional_candidate_using_diagonal_progress_________________
+    if(ITER>4*NParam){
+
+        NRuns <- NRuns+1;
+        iNewOptim <- 0; iNew <- 1;
+        CandidatesParamT <- NewParamOptimT+PaceDiag;  if(!is.matrix(CandidatesParamT)){ CandidatesParamT <- matrix(CandidatesParamT,nrow=1); }
+        ##If_we_exit_the_range_of_possible_values_we_go_back_on_the_boundary
+        for(iC in 1:NParam){ if(CalibOptions$OptimParam[iC]==TRUE){
+          if(CandidatesParamT[iNew,iC]<RangesT[1,iC]){ CandidatesParamT[iNew,iC] <- RangesT[1,iC]; }
+          if(CandidatesParamT[iNew,iC]>RangesT[2,iC]){ CandidatesParamT[iNew,iC] <- RangesT[2,iC]; }
+        } }
+        CandidatesParamR <- FUN_TRANSFO(CandidatesParamT,"TR");
+        ##Model_run
+        Param <- CandidatesParamR[iNew,];
+        OutputsModel <- FUN_MOD(InputsModel,RunOptions,Param);
+        ##Calibration_criterion_computation
+        OutputsCrit <- FUN_CRIT(InputsCrit,OutputsModel);      
+        if(OutputsCrit$CritValue*OutputsCrit$Multiplier < CritOptim){
+          CritOptim <- OutputsCrit$CritValue*OutputsCrit$Multiplier;
+          iNewOptim <- iNew;
+        }
+        ##When_a_progress_has_been_achieved
+        if(iNewOptim!=0){
+          OldParamOptimT <- NewParamOptimT;
+          NewParamOptimT <- matrix(CandidatesParamT[iNewOptim,1:NParam],nrow=1);
+        }
+
+    }
+    
+
+    ##Results_archiving_______________________________________________________
+    NewParamOptimR      <- FUN_TRANSFO(NewParamOptimT,"TR");
+    HistParamR[ITER+1,] <- NewParamOptimR;
+    HistParamT[ITER+1,] <- NewParamOptimT;
+    HistCrit[ITER+1,]   <- CritOptim;
+    ### if(!quiet){ cat(paste("\t     Iter ",formatC(ITER,format="d",width=3),"    Crit ",formatC(CritOptim,format="f",digits=4),"    Pace ",formatC(Pace,format="f",digits=4),"\n",sep="")); }
+
+
+
+    } ##END_LOOP_ITER_________________________________________________________
+    ITER <- ITER-1;
+    
+
+    ##Case_when_the_starting_parameter_set_remains_the_best_solution__________
+    if(CritOptim==CritStart & !quiet){ 
+      cat("\t No progress achieved \n"); 
+    }
+    
+    ##End_of_Steepest_Descent_Local_Search____________________________________
+    ParamFinalR <- NewParamOptimR;
+    ParamFinalT <- NewParamOptimT;
+    CritFinal   <- CritOptim;
+    NIter       <- 1+ITER;
+    if(!quiet){ 
+      cat(paste("\t Calibration completed (",NIter," iterations, ",NRuns," runs): \n",sep=""));
+      cat(paste("\t     Param = ",paste(formatC(ParamFinalR,format="f",width=8,digits=3),collapse=" , "),"\n",sep=""));
+      cat(paste("\t     Crit ",format(CritName,width=12,justify="left")," = ",formatC(CritFinal*Multiplier,format="f",digits=4),"\n",sep=""));
+    }
+    ##Results_archiving_______________________________________________________
+  	HistParamR <- cbind(HistParamR[1:NIter,]); colnames(HistParamR) <- paste("Param",1:NParam,sep="");
+  	HistParamT <- cbind(HistParamT[1:NIter,]); colnames(HistParamT) <- paste("Param",1:NParam,sep="");
+	  HistCrit   <- cbind(HistCrit[1:NIter,]);   ###colnames(HistCrit) <- paste("HistCrit");
+
+    BoolCrit_Actual <- InputsCrit$BoolCrit; BoolCrit_Actual[OutputsCrit$Ind_notcomputed] <- FALSE;
+    MatBoolCrit <- cbind( InputsCrit$BoolCrit , BoolCrit_Actual );
+    colnames(MatBoolCrit) <- c("BoolCrit_Requested","BoolCrit_Actual");
+
+
+##_____Output______________________________________________________________________________
+    OutputsCalib <- list(as.double(ParamFinalR),CritFinal*Multiplier,NIter,NRuns,HistParamR,HistCrit*Multiplier,MatBoolCrit,CritName,CritBestValue);
+    names(OutputsCalib) <- c("ParamFinalR","CritFinal","NIter","NRuns","HistParamR","HistCrit","MatBoolCrit","CritName","CritBestValue");
+    class(OutputsCalib) <- c("OutputsCalib","HBAN");
+    return(OutputsCalib);
+
+
+
+}
+
+
+
+  
+
diff --git a/R/Calibration_optim.R b/R/Calibration_optim.R
new file mode 100644
index 00000000..81f1424f
--- /dev/null
+++ b/R/Calibration_optim.R
@@ -0,0 +1,149 @@
+#*************************************************************************************************
+#' Calibration algorithm which minimises the error criterion. \cr
+#' \cr
+#' The algorithm is based on the "optim" function from the "stats" R-package 
+#' (using method="L-BFGS-B", i.e. a local optimization quasi-Newton method).
+#'
+#' To optimise the exploration of the parameter space, transformation functions are used to convert
+#' the model parameters. This is done using the TransfoParam functions.
+#*************************************************************************************************
+#' @title  Calibration algorithm which minimises the error criterion using the stats::optim function
+#' @author Laurent Coron (August 2013)
+#' @example tests/example_Calibration_optim.R
+#' @seealso \code{\link{Calibration}}, \code{\link{Calibration_HBAN}},
+#'          \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, 
+#'          \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}.
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  InputsCrit          [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  CalibOptions        [object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details
+#' @param  FUN_MOD             [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
+#' @param  FUN_CRIT            [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)
+#' @param  FUN_TRANSFO         (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined
+#' @param  quiet               (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:
+#'          \tabular{ll}{
+#'          \emph{$ParamFinalR  }  \tab   [numeric] parameter set obtained at the end of the calibration \cr
+#'          \emph{$CritFinal    }  \tab   [numeric] error criterion obtained at the end of the calibration \cr
+#'          \emph{$Nruns        }  \tab   [numeric] number of model runs done during the calibration \cr
+#'          \emph{$CritName     }  \tab   [character] name of the calibration criterion \cr
+#'          \emph{$CritBestValue}  \tab   [numeric] theoretical best criterion value \cr
+#'          }
+#**************************************************************************************************
+Calibration_optim <- function(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO=NULL,quiet=FALSE){
+    
+
+    ##_check_class
+    if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+    if(inherits(RunOptions,"RunOptions")==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); }  
+    if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); }  
+    if(inherits(CalibOptions,"CalibOptions")==FALSE){ stop("CalibOptions must be of class 'CalibOptions' \n"); return(NULL); }  
+    if(inherits(CalibOptions,"optim")==FALSE){ stop("CalibOptions must be of class 'optim' if Calibration_optim is used \n"); return(NULL); }  
+
+
+    ##_check_FUN_TRANSFO
+    if(is.null(FUN_TRANSFO)){
+      if(identical(FUN_MOD,RunModel_GR4J         )){ FUN_TRANSFO <- TransfoParam_GR4J     ; }
+      if(identical(FUN_MOD,RunModel_GR5J         )){ FUN_TRANSFO <- TransfoParam_GR5J     ; }
+      if(identical(FUN_MOD,RunModel_GR6J         )){ FUN_TRANSFO <- TransfoParam_GR6J     ; }
+      if(identical(FUN_MOD,RunModel_CemaNeige    )){ FUN_TRANSFO <- TransfoParam_CemaNeige; }
+      if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){
+        if(identical(FUN_MOD,RunModel_CemaNeigeGR4J)){ FUN1 <- TransfoParam_GR4J; FUN2 <- TransfoParam_CemaNeige; }
+        if(identical(FUN_MOD,RunModel_CemaNeigeGR5J)){ FUN1 <- TransfoParam_GR5J; FUN2 <- TransfoParam_CemaNeige; }
+        if(identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ FUN1 <- TransfoParam_GR6J; FUN2 <- TransfoParam_CemaNeige; }
+        FUN_TRANSFO <- function(ParamIn,Direction){
+          Bool <- is.matrix(ParamIn);
+          if(Bool==FALSE){ ParamIn <- rbind(ParamIn); }
+          ParamOut <- NA*ParamIn;
+          NParam   <- ncol(ParamIn);
+          ParamOut[,         1:(NParam-2)] <- FUN1(ParamIn[,         1:(NParam-2)],Direction);
+          ParamOut[,(NParam-1):NParam    ] <- FUN2(ParamIn[,(NParam-1):NParam    ],Direction);
+          if(Bool==FALSE){ ParamOut <- ParamOut[1,]; }
+          return(ParamOut);
+        }
+      }
+      if(is.null(FUN_TRANSFO)){ stop("FUN_TRANSFO was not found (in Calibration function) \n"); return(NULL);  }
+    }
+
+
+    ##_RunModelAndCrit
+    RunModelAndCrit <- function(par,InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO){
+        ParamT <- NA*CalibOptions$FixedParam;
+        ParamT[CalibOptions$OptimParam] <- par;
+        Param <- FUN_TRANSFO(ParamIn=ParamT,Direction="TR");
+        Param[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam];
+        OutputsModel <- FUN_MOD(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param);
+        OutputsCrit <- FUN_CRIT(InputsCrit=InputsCrit,OutputsModel=OutputsModel);   
+        return(OutputsCrit$CritValue*OutputsCrit$Multiplier);
+    }
+
+
+    ##_temporary_change_of_Outputs_Sim
+    RunOptions$Outputs_Sim <- RunOptions$Outputs_Cal;  ### this reduces the size of the matrix exchange with fortran and therefore speeds the calibration
+    ##_screenPrint
+    if(!quiet){ 
+      cat(paste("\t Calibration in progress (function optim from the stats package) \n",sep=""));
+    }
+    
+
+    ##_lower_and_upper_limit_values (transformed)
+    RangesR <- CalibOptions$SearchRanges;
+    RangesT <- FUN_TRANSFO(RangesR,"RT");
+    lower   <- RangesT[1,CalibOptions$OptimParam];
+    upper   <- RangesT[2,CalibOptions$OptimParam];
+
+    ##_starting_values (transformed)
+    ParamStartT <- FUN_TRANSFO(CalibOptions$StartParam,"RT");
+    par_start   <- ParamStartT[CalibOptions$OptimParam]; 
+
+
+    ##_calibration
+    RESULT <- optim(par=par_start,fn=RunModelAndCrit,gr=NULL,
+                InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO,  ## arguments for the RunModelAndCrit function (other than par)
+                method="L-BFGS-B",lower=lower,upper=upper,control=list(),hessian=FALSE)
+    
+
+    ##_outputs_preparation
+    ParamFinalT <- NA*ParamStartT;
+    ParamFinalT[CalibOptions$OptimParam] <- RESULT$par;
+    ParamFinalR <- FUN_TRANSFO(ParamFinalT,"TR");
+    ParamFinalR[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam];  
+    CritFinal <- RESULT$value;
+
+    ##_storage_of_crit_info
+    OutputsModel  <- FUN_MOD(InputsModel=InputsModel,RunOptions=RunOptions,Param=ParamFinalR);
+    OutputsCrit   <- FUN_CRIT(InputsCrit=InputsCrit,OutputsModel=OutputsModel);   
+    CritName      <- OutputsCrit$CritName;
+    CritBestValue <- OutputsCrit$CritBestValue;
+    Multiplier    <- OutputsCrit$Multiplier;
+
+    ##_screenPrint
+    if(!quiet){ 
+      if(RESULT$convergence==0){ 
+        cat(paste("\t Calibration completed: \n",sep=""));
+        cat(paste("\t     Param = ",paste(formatC(ParamFinalR,format="f",width=8,digits=3),collapse=" , "),"\n",sep=""));
+        cat(paste("\t     Crit ",format(CritName,width=12,justify="left")," = ",formatC(CritFinal*Multiplier,format="f",digits=4),"\n",sep=""));
+      } else {
+        cat(paste("\t Calibration failed: \n",sep=""));
+        cat(paste("\t     ",RESULT$message,sep=""));
+      }
+    }
+    
+    
+    ##_function_output
+    OutputsCalib <- list(as.double(ParamFinalR),CritFinal*Multiplier,as.integer(RESULT$counts[1]),CritName,CritBestValue);
+    names(OutputsCalib) <- c("ParamFinalR","CritFinal","NRuns","CritName","CritBestValue");
+    class(OutputsCalib) <- c("OutputsCalib","optim");
+    return(OutputsCalib);
+
+
+}
+
+
+
+
diff --git a/R/CreateCalibOptions.R b/R/CreateCalibOptions.R
new file mode 100644
index 00000000..c94d5efc
--- /dev/null
+++ b/R/CreateCalibOptions.R
@@ -0,0 +1,226 @@
+#*************************************************************************************************
+#' Creation of the CalibOptions object required to the Calibration functions.
+#'
+#' Users wanting to use FUN_MOD, FUN_CALIB or FUN_TRANSFO functions that are not included in 
+#' the package must create their own CalibOptions object accordingly.
+#*************************************************************************************************
+#' @title  Creation of the CalibOptions object required to the Calibration functions
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}
+#' @example tests/example_Calibration.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________
+#' @param  FUN_MOD             [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
+#' @param  FUN_CALIB           (optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN
+#' @param  FUN_TRANSFO         (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined
+#' @param  RunOptions          (optional) [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  OptimParam          (optional) [boolean] vector of booleans indicating which parameters must be optimised (NParam columns, 1 line) 
+#' @param  FixedParam          (optional) [numeric] vector giving the values to allocate to non-optimised parameter values (NParam columns, 1 line)
+#' @param  SearchRanges        (optional) [numeric] matrix giving the ranges of real parameters (NParam columns, 2 lines)
+#'                             \tabular{llllll}{
+#'                                           \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+#'                                  [1,]     \tab    0   \tab   -1   \tab    0   \tab  ...    \tab  0.0 \cr
+#'                                  [2,]     \tab 3000   \tab   +1   \tab  100   \tab  ...    \tab  3.0 \cr
+#'                             }
+#' @param  StartParam          (optional) [numeric] vector of parameter values used to start global search calibration procedure (e.g. Calibration_optim)
+#'                             \tabular{llllll}{
+#'                                           \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+#'                                           \tab 1000   \tab -0.5   \tab   22   \tab  ...    \tab  1.1 \cr
+#'                             }
+#' @param  StartParamList      (optional) [numeric] matrix of parameter sets used for grid-screening calibration procedure (values in columns, sets in line)
+#'                             \tabular{llllll}{
+#'                                           \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+#'                                  [set1]   \tab  800   \tab -0.7   \tab   25   \tab  ...    \tab  1.0 \cr
+#'                                  [set2]   \tab 1000   \tab -0.5   \tab   22   \tab  ...    \tab  1.1 \cr
+#'                                  [...]    \tab  ...   \tab  ...   \tab  ...   \tab  ...    \tab  ... \cr
+#'                                  [set n]  \tab  200   \tab -0.3   \tab   17   \tab  ...    \tab  1.0 \cr
+#'                             }
+#' @param  StartParamDistrib   (optional) [numeric] matrix of parameter values used for grid-screening calibration procedure (values in columns, percentiles in line) \cr
+#'                             \tabular{llllll}{
+#'                                           \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+#'                                  [value1] \tab  800   \tab -0.7   \tab   25   \tab  ...    \tab  1.0 \cr
+#'                                  [value2] \tab 1000   \tab   NA   \tab   50   \tab  ...    \tab  1.2 \cr
+#'                                  [value3] \tab 1200   \tab   NA   \tab   NA   \tab  ...    \tab  1.6 \cr
+#'                             }
+#_FunctionOutputs_________________________________________________________________________________
+#' @return  [list] object of class \emph{CalibOptions} containing the data required to evaluate the model outputs; it can include the following:
+#'          \tabular{ll}{
+#'          \emph{$OptimParam       }  \tab   [boolean] vector of booleans indicating which parameters must be optimised \cr
+#'          \emph{$FixedParam       }  \tab   [numeric] vector giving the values to allocate to non-optimised parameter values \cr
+#'          \emph{$SearchRanges     }  \tab   [numeric] matrix giving the ranges of real parameters \cr
+#'          \emph{$StartParam       }  \tab   [numeric] vector of parameter values used to start global search calibration procedure \cr
+#'          \emph{$StartParamList   }  \tab   [numeric] matrix of parameter sets used for grid-screening calibration procedure \cr
+#'          \emph{$StartParamDistrib}  \tab   [numeric] matrix of parameter values used for grid-screening calibration procedure \cr
+#'          }
+#**************************************************************************************************'
+CreateCalibOptions <- function(FUN_MOD,FUN_CALIB=Calibration_HBAN,FUN_TRANSFO=NULL,RunOptions=NULL,OptimParam=NULL,FixedParam=NULL,SearchRanges=NULL,
+                               StartParam=NULL,StartParamList=NULL,StartParamDistrib=NULL){
+
+
+  ObjectClass <- NULL;
+
+  ##check_FUN_MOD
+    BOOL <- FALSE;
+    if(identical(FUN_MOD,RunModel_GR4J         )){ ObjectClass <- c(ObjectClass,"GR4J"         ); BOOL <- TRUE; }
+    if(identical(FUN_MOD,RunModel_GR5J         )){ ObjectClass <- c(ObjectClass,"GR5J"         ); BOOL <- TRUE; }
+    if(identical(FUN_MOD,RunModel_GR6J         )){ ObjectClass <- c(ObjectClass,"GR6J"         ); BOOL <- TRUE; }
+    if(identical(FUN_MOD,RunModel_CemaNeige    )){ ObjectClass <- c(ObjectClass,"CemaNeige"    ); BOOL <- TRUE; }
+    if(identical(FUN_MOD,RunModel_CemaNeigeGR4J)){ ObjectClass <- c(ObjectClass,"CemaNeigeGR4J"); BOOL <- TRUE; }
+    if(identical(FUN_MOD,RunModel_CemaNeigeGR5J)){ ObjectClass <- c(ObjectClass,"CemaNeigeGR5J"); BOOL <- TRUE; }
+    if(identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ ObjectClass <- c(ObjectClass,"CemaNeigeGR6J"); BOOL <- TRUE; }
+    if(!BOOL){ stop("incorrect FUN_MOD for use in CreateCalibOptions \n"); return(NULL); } 
+
+  ##check_FUN_CALIB
+    BOOL <- FALSE;
+    if(identical(FUN_CALIB,Calibration_HBAN )){ ObjectClass <- c(ObjectClass,"HBAN" ); BOOL <- TRUE; }
+    if(identical(FUN_CALIB,Calibration_optim)){ ObjectClass <- c(ObjectClass,"optim"); BOOL <- TRUE; }
+    if(!BOOL){ stop("incorrect FUN_CALIB for use in CreateCalibOptions \n"); return(NULL); } 
+
+  ##check_FUN_TRANSFO
+    if(is.null(FUN_TRANSFO)){
+      ##_set_FUN1
+      if(identical(FUN_MOD,RunModel_GR4J     ) | identical(FUN_MOD,RunModel_CemaNeigeGR4J) ){ FUN1 <- TransfoParam_GR4J     ; }
+      if(identical(FUN_MOD,RunModel_GR5J     ) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) ){ FUN1 <- TransfoParam_GR5J     ; }
+      if(identical(FUN_MOD,RunModel_GR6J     ) | identical(FUN_MOD,RunModel_CemaNeigeGR6J) ){ FUN1 <- TransfoParam_GR6J     ; }
+      if(identical(FUN_MOD,RunModel_CemaNeige)                                             ){ FUN1 <- TransfoParam_CemaNeige; }
+      if(is.null(FUN1)){ stop("FUN1 was not found \n"); return(NULL);  }
+      ##_set_FUN2
+      FUN2 <- TransfoParam_CemaNeige;
+      ##_set_FUN_TRANSFO
+      if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_GR6J) | identical(FUN_MOD,RunModel_CemaNeige)){
+        FUN_TRANSFO <- FUN1; 
+      } else {
+        FUN_TRANSFO <- function(ParamIn,Direction){
+          Bool <- is.matrix(ParamIn);
+          if(Bool==FALSE){ ParamIn <- rbind(ParamIn); }
+          ParamOut <- NA*ParamIn;
+          NParam   <- ncol(ParamIn);
+          if(NParam <= 3){
+          ParamOut[,         1:(NParam-2)] <- FUN1(cbind(ParamIn[,1:(NParam-2)]),Direction);
+          } else {
+          ParamOut[,         1:(NParam-2)] <- FUN1(ParamIn[,1:(NParam-2)     ],Direction); }
+          ParamOut[,(NParam-1):NParam    ] <- FUN2(ParamIn[,(NParam-1):NParam],Direction);
+          if(Bool==FALSE){ ParamOut <- ParamOut[1,]; }
+          return(ParamOut);
+        }
+      }
+    }
+    if(is.null(FUN_TRANSFO)){ stop("FUN_TRANSFO was not found \n"); return(NULL);  }
+
+  ##check_RunOptions
+    if(!is.null(RunOptions)){ 
+      if(inherits(RunOptions,"RunOptions")==FALSE){ stop("RunOptions must be of class 'RunOptions' if not null= \n"); return(NULL); }  
+    }
+
+  ##NParam
+    if("GR4J"          %in% ObjectClass){ NParam <- 4; }
+    if("GR5J"          %in% ObjectClass){ NParam <- 5; }
+    if("GR6J"          %in% ObjectClass){ NParam <- 6; }
+    if("CemaNeige"     %in% ObjectClass){ NParam <- 2; }
+    if("CemaNeigeGR4J" %in% ObjectClass){ NParam <- 6; }
+    if("CemaNeigeGR5J" %in% ObjectClass){ NParam <- 7; }
+    if("CemaNeigeGR6J" %in% ObjectClass){ NParam <- 8; }
+
+  ##check_OptimParam
+    if(is.null(OptimParam)){
+      OptimParam <- rep(TRUE,NParam);
+    } else {
+      if(!is.vector(OptimParam)    ){ stop("OptimParam must be a vector of booleans \n"); return(NULL);  }
+      if(length(OptimParam)!=NParam){ stop("Incompatibility between OptimParam length and FUN_MOD \n"); return(NULL);  }
+      if(!is.logical(OptimParam)   ){ stop("OptimParam must be a vector of booleans \n"); return(NULL);  }
+    }
+
+  ##check_FixedParam
+    if(is.null(FixedParam)){
+      FixedParam <- rep(NA,NParam);
+    } else {
+      if(!is.vector(FixedParam)              ){ stop("FixedParam must be a vector \n"); return(NULL);  }
+      if(length(FixedParam)!=NParam          ){ stop("Incompatibility between OptimParam length and FUN_MOD \n"); return(NULL);  }
+      if(!is.numeric(FixedParam[!OptimParam])){ stop("if OptimParam[i]==FALSE, FixedParam[i] must be a numeric value \n"); return(NULL);  }
+    }
+
+  ##check_SearchRanges
+    if(is.null(SearchRanges)){
+      ParamT <- matrix(c(rep(-9.99,NParam),rep(+9.99,NParam)),ncol=NParam,byrow=TRUE);
+      SearchRanges <- TransfoParam(ParamIn=ParamT,Direction="TR",FUN_TRANSFO=FUN_TRANSFO);
+    } else {
+      if(!is.matrix( SearchRanges)  ){ stop("SearchRanges must be a matrix \n"); return(NULL);  }
+      if(!is.numeric(SearchRanges)  ){ stop("SearchRanges must be a matrix of numeric values \n"); return(NULL);  }
+      if(sum(is.na(SearchRanges))!=0){ stop("SearchRanges must not include NA values \n"); return(NULL);  }
+      if(nrow(SearchRanges)!=2      ){ stop("SearchRanges must have 2 rows \n"); return(NULL);  }
+      if(ncol(SearchRanges)!=NParam ){ stop("Incompatibility between SearchRanges ncol and FUN_MOD \n"); return(NULL);  }
+    }
+
+  ##check_StartParamList_and_StartParamDistrib__default_values
+    if( ("HBAN"  %in% ObjectClass & is.null(StartParamList) & is.null(StartParamDistrib)) |
+        ("optim" %in% ObjectClass & is.null(StartParam)) ){
+
+      if("GR4J"%in% ObjectClass){ 
+        ParamT <- matrix( c( +3.60, -2.00, +3.40, -9.10,
+                             +3.90, -0.90, +4.10, -8.70,
+                             +4.50, -0.10, +5.00, -8.10),ncol=NParam,byrow=TRUE); }
+      if("GR5J"%in% ObjectClass){ 
+        ParamT <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70,
+                             +3.90, -0.60, +4.10, -8.70, +0.30,
+                             +4.50, -0.10, +5.00, -8.10, +0.50),ncol=NParam,byrow=TRUE); }
+      if("GR6J"%in% ObjectClass){ 
+        ParamT <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00,
+                             +3.90, -0.50, +4.10, -8.70, +0.10, +4.00,
+                             +4.50, +0.50, +5.00, -8.10, +1.10, +5.00),ncol=NParam,byrow=TRUE); }
+      if("CemaNeige"%in% ObjectClass){ 
+        ParamT <- matrix( c( -6.26, +0.55,
+                             -2.13, +0.92,
+                             +4.86, +1.40),ncol=NParam,byrow=TRUE); }
+      if("CemaNeigeGR4J"%in% ObjectClass){ 
+        ParamT <- matrix( c( +3.60, -2.00, +3.40, -9.10, -6.26, +0.55,
+                             +3.90, -0.90, +4.10, -8.70, -2.13, +0.92,
+                             +4.50, -0.10, +5.00, -8.10, +4.86, +1.40),ncol=NParam,byrow=TRUE); }
+      if("CemaNeigeGR5J"%in% ObjectClass){ 
+        ParamT <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70, -6.26, +0.55,
+                             +3.90, -0.60, +4.10, -8.70, +0.30, -2.13, +0.92,
+                             +4.50, -0.10, +5.00, -8.10, +0.50, +4.86, +1.40),ncol=NParam,byrow=TRUE); }
+      if("CemaNeigeGR6J"%in% ObjectClass){ 
+        ParamT <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00, -6.26, +0.55,
+                             +3.90, -0.50, +4.10, -8.70, +0.10, +4.00, -2.13, +0.92,
+                             +4.50, +0.50, +5.00, -8.10, +1.10, +5.00, +4.86, +1.40),ncol=NParam,byrow=TRUE); }
+
+      StartParamList    <- NULL;
+      StartParamDistrib <- TransfoParam(ParamIn=ParamT,Direction="TR",FUN_TRANSFO=FUN_TRANSFO);
+      StartParam        <- StartParamDistrib[2,];
+    }
+
+  ##check_StartParamList_and_StartParamDistrib__format
+    if("HBAN" %in% ObjectClass & !is.null(StartParamList)){
+      if(!is.matrix( StartParamList)  ){ stop("StartParamList must be a matrix \n"); return(NULL);  }
+      if(!is.numeric(StartParamList)  ){ stop("StartParamList must be a matrix of numeric values \n"); return(NULL);  }
+      if(sum(is.na(StartParamList))!=0){ stop("StartParamList must not include NA values \n"); return(NULL);  }
+      if(ncol(StartParamList)!=NParam ){ stop("Incompatibility between StartParamList ncol and FUN_MOD \n"); return(NULL);  }
+    }
+    if("HBAN" %in% ObjectClass & !is.null(StartParamDistrib)){
+      if(!is.matrix( StartParamDistrib)      ){ stop("StartParamDistrib must be a matrix \n"); return(NULL);  }
+      if(!is.numeric(StartParamDistrib[1,])  ){ stop("StartParamDistrib must be a matrix of numeric values \n"); return(NULL);  }
+      if(sum(is.na(StartParamDistrib[1,]))!=0){ stop("StartParamDistrib must not include NA values on the first line \n"); return(NULL);  }
+      if(ncol(StartParamDistrib)!=NParam     ){ stop("Incompatibility between StartParamDistrib ncol and FUN_MOD \n"); return(NULL);  }
+    }
+    if("optim" %in% ObjectClass & !is.null(StartParam)){
+      if(!is.vector( StartParam)    ){ stop("StartParam must be a vector \n"); return(NULL);  }
+      if(!is.numeric(StartParam)    ){ stop("StartParam must be a vector of numeric values \n"); return(NULL);  }
+      if(sum(is.na(StartParam))!=0  ){ stop("StartParam must not include NA values \n"); return(NULL);  }
+      if(length(StartParam)!=NParam ){ stop("Incompatibility between StartParam length and FUN_MOD \n"); return(NULL);  }
+    }
+
+
+  ##Create_CalibOptions
+    CalibOptions <- list(OptimParam=OptimParam,FixedParam=FixedParam,SearchRanges=SearchRanges);
+    if(!is.null(StartParam       )){ CalibOptions <- c(CalibOptions,list(StartParam=StartParam)); }
+    if(!is.null(StartParamList   )){ CalibOptions <- c(CalibOptions,list(StartParamList=StartParamList)); }
+    if(!is.null(StartParamDistrib)){ CalibOptions <- c(CalibOptions,list(StartParamDistrib=StartParamDistrib)); }
+    class(CalibOptions) <- c("CalibOptions",ObjectClass);
+    return(CalibOptions);
+
+
+}
+
+
+
diff --git a/R/CreateInputsCrit.R b/R/CreateInputsCrit.R
new file mode 100644
index 00000000..5dcd672c
--- /dev/null
+++ b/R/CreateInputsCrit.R
@@ -0,0 +1,81 @@
+#*************************************************************************************************
+#' Creation of the InputsCrit object required to the ErrorCrit functions.
+#'
+#' Users wanting to use FUN_CRIT functions that are not included in 
+#' the package must create their own InputsCrit object accordingly.
+#*************************************************************************************************
+#' @title  Creation of the InputsCrit object required to the ErrorCrit functions
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateCalibOptions}}
+#' @example tests/example_ErrorCrit.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________
+#' @param  FUN_CRIT     [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)
+#' @param  InputsModel  [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions   [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Qobs         [numeric] series of observed discharges [mm]
+#' @param  BoolCrit     (optional) [boolean] boolean giving the time steps to consider in the computation (all time steps are consider by default)
+#' @param  transfo      (optional) [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort")
+#' @param  Ind_zeroes   (optional) [numeric] indices of the time-steps where zeroes are observed
+#' @param  epsilon      (optional) [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty
+#_FunctionOutputs_________________________________________________________________________________
+#' @return  [list] object of class \emph{InputsCrit} containing the data required to evaluate the model outputs; it can include the following:
+#'          \tabular{ll}{
+#'          \emph{$BoolCrit  }  \tab   [boolean] boolean giving the time steps to consider in the computation \cr
+#'          \emph{$Qobs      }  \tab   [numeric] series of observed discharges [mm] \cr
+#'          \emph{$transfo   }  \tab   [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort") \cr
+#'          \emph{$Ind_zeroes}  \tab   [numeric] indices of the time-steps where zeroes are observed \cr
+#'          \emph{$epsilon   }  \tab   [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty \cr
+#'          }
+#**************************************************************************************************
+CreateInputsCrit <- function(FUN_CRIT,InputsModel,RunOptions,Qobs,BoolCrit=NULL,transfo="",Ind_zeroes=NULL,epsilon=NULL){
+
+  ObjectClass <- NULL;
+
+  ##check_FUN_CRIT
+    BOOL <- FALSE;
+    if(identical(FUN_CRIT,ErrorCrit_RMSE) | identical(FUN_CRIT,ErrorCrit_NSE) | identical(FUN_CRIT,ErrorCrit_KGE) | identical(FUN_CRIT,ErrorCrit_KGE2)){
+      BOOL <- TRUE; 
+    }
+    if(!BOOL){ stop("incorrect FUN_CRIT for use in CreateInputsCrit \n"); return(NULL); } 
+
+  ##check_arguments
+    if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n" ); return(NULL); } 
+    if(inherits(RunOptions ,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n" ); return(NULL); } 
+    LLL <- length(InputsModel$DatesR[RunOptions$IndPeriod_Run])
+
+    if(is.null(Qobs)    ){ stop("Qobs is missing \n"); return(NULL); } 
+    if(!is.vector( Qobs)){ stop(paste("Qobs must be a vector of numeric values \n",sep="")); return(NULL); }
+    if(!is.numeric(Qobs)){ stop(paste("Qobs must be a vector of numeric values \n",sep="")); return(NULL); }
+    if(length(Qobs)!=LLL){ stop("Qobs and InputsModel series must have the same length \n"); return(NULL); } 
+
+    if(is.null(BoolCrit)){ BoolCrit <- rep(TRUE,length(Qobs)); }
+    if(!is.logical(BoolCrit)){ stop("BoolCrit must be a vector of boolean \n" ); return(NULL); } 
+    if(length(BoolCrit)!=LLL){ stop("BoolCrit and InputsModel series must have the same length \n"); return(NULL); } 
+
+    if(is.null(transfo)      ){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } 
+    if(!is.vector(   transfo)){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } 
+    if(length(transfo)!=1    ){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } 
+    if(!is.character(transfo)){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } 
+    if(transfo %in% c("","sqrt","log","inv") == FALSE){
+                                stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } 
+
+    if(!is.null(Ind_zeroes)){
+      if(!is.vector( Ind_zeroes)){ stop("Ind_zeroes must be a vector of integers \n" ); return(NULL); } 
+      if(!is.integer(Ind_zeroes)){ stop("Ind_zeroes must be a vector of integers \n" ); return(NULL); } 
+    }
+    if(!is.null(epsilon)){
+      if(!is.vector( epsilon) | length(epsilon)!=1 | !is.numeric(epsilon)){ 
+        stop("epsilon must be single numeric value \n" ); return(NULL); }
+      epsilon=as.double(epsilon);
+    }
+
+  ##Create_InputsCrit
+    InputsCrit <- list(BoolCrit=BoolCrit,Qobs=Qobs,transfo=transfo,Ind_zeroes=Ind_zeroes,epsilon=epsilon);
+    class(InputsCrit) <- c("InputsCrit",ObjectClass);
+    return(InputsCrit);
+
+
+}
+
diff --git a/R/CreateInputsModel.R b/R/CreateInputsModel.R
new file mode 100644
index 00000000..e1b8be1a
--- /dev/null
+++ b/R/CreateInputsModel.R
@@ -0,0 +1,156 @@
+#*************************************************************************************************
+#' Creation of the InputsModel object required to the RunModel functions.
+#'
+#' Users wanting to use FUN_MOD functions that are not included in 
+#' the package must create their own InputsModel object accordingly.
+#*************************************************************************************************
+#' @title  Creation of the InputsModel object required to the RunModel functions
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{RunModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}, \code{\link{DataAltiExtrapolation_HBAN}}
+#' @example tests/example_RunModel.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________
+#' @param  FUN_MOD     [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
+#' @param  DatesR      [POSIXlt] vector of dates required to create the GR model and CemaNeige module inputs
+#' @param  Precip      [numeric] time series of daily total precipitation (catchment average) [mm], required to create the GR model and CemaNeige module inputs
+#' @param  PotEvap     [numeric] time series of daily potential evapotranspiration (catchment average) [mm], required to create the GR model inputs
+#' @param  TempMean    [numeric] time series of daily mean air temperature [degC], required to create the CemaNeige module inputs
+#' @param  TempMin     (optional) [numeric] time series of daily min air temperature [degC], possibly used to create the CemaNeige module inputs
+#' @param  TempMax     (optional) [numeric] time series of daily max air temperature [degC], possibly used to create the CemaNeige module inputs
+#' @param  ZInputs     (optional) [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]
+#' @param  HypsoData   (optional) [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m], required to create the GR model inputs, if not defined a single elevation is used for CemaNeige
+#' @param  NLayers     (optional) [numeric] integer giving the number of elevation layers requested [-], required to create the GR model inputs, default=5
+#' @param  quiet       (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________
+#' @return  [list] object of class \emph{InputsModel} containing the data required to evaluate the model outputs; it can include the following:
+#'          \tabular{ll}{
+#'          \emph{$DatesR              }  \tab   [POSIXlt] vector of dates \cr
+#'          \emph{$Precip              }  \tab   [numeric] time series of daily total precipitation (catchment average) [mm] \cr
+#'          \emph{$PotEvap             }  \tab   [numeric] time series of daily potential evapotranspiration (catchment average) [mm], \cr\tab defined if FUN_MOD includes GR4J, GR5J or GR6J \cr \cr
+#'          \emph{$LayerPrecip         }  \tab   [list] list of time series of daily precipitation (layer average) [mm], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
+#'          \emph{$LayerTempMean       }  \tab   [list] list of time series of daily mean air temperature (layer average) [degC], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
+#'          \emph{$LayerFracSolidPrecip}  \tab   [list] list of time series of daily solid precip. fract. (layer average) [-], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
+#'          }
+#**************************************************************************************************
+CreateInputsModel <- function(FUN_MOD,DatesR,Precip,PotEvap=NULL,TempMean=NULL,TempMin=NULL,TempMax=NULL,ZInputs=NULL,HypsoData=NULL,NLayers=5,quiet=FALSE){
+
+  ObjectClass <- NULL;
+
+  ##check_FUN_MOD
+    BOOL <- FALSE;
+    if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_GR6J)){
+      ObjectClass <- c(ObjectClass,"daily","GR"); 
+      TimeStep <- as.integer(24*60*60);
+      BOOL <- TRUE; 
+    }
+    if(identical(FUN_MOD,RunModel_CemaNeige)){
+      ObjectClass <- c(ObjectClass,"daily","CemaNeige");
+      TimeStep <- as.integer(24*60*60);
+      BOOL <- TRUE; 
+    }
+    if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){
+      ObjectClass <- c(ObjectClass,"daily","GR","CemaNeige");
+      TimeStep <- as.integer(24*60*60);
+      BOOL <- TRUE; 
+    }
+    if(!BOOL){ stop("incorrect FUN_MOD for use in CreateInputsModel \n"); return(NULL); } 
+
+  ##check_arguments
+    if("GR" %in% ObjectClass | "CemaNeige" %in% ObjectClass){
+      if(is.null(DatesR)){ stop("DatesR is missing \n"); return(NULL); } 
+      if("POSIXlt" %in% class(DatesR) == FALSE & "POSIXct" %in% class(DatesR) == FALSE){ stop("DatesR must be defined as POSIXlt or POSIXct \n"); return(NULL); }
+      if("POSIXlt" %in% class(DatesR) == FALSE){ DatesR <- as.POSIXlt(DatesR); }
+      if(difftime(tail(DatesR,1),tail(DatesR,2),units="secs")[[1]]!=TimeStep){ stop(paste("the time step of the model inputs must be ",TimeStep," seconds \n",sep="")); return(NULL); }    
+      LLL <- length(DatesR);
+    }
+    if("GR" %in% ObjectClass){
+      if(is.null(Precip  )){ stop("Precip is missing \n"  ); return(NULL); } 
+      if(is.null(PotEvap )){ stop("PotEvap is missing \n" ); return(NULL); } 
+      if(!is.vector( Precip) | !is.vector( PotEvap)){ stop("Precip and PotEvap must be vectors of numeric values \n"); return(NULL); } 
+      if(!is.numeric(Precip) | !is.numeric(PotEvap)){ stop("Precip and PotEvap must be vectors of numeric values \n"); return(NULL); } 
+      if(length(Precip)!=LLL | length(PotEvap)!=LLL){ stop("Precip, PotEvap and DatesR must have the same length \n"); return(NULL); } 
+    }
+    if("CemaNeige" %in% ObjectClass){
+      if(is.null(Precip  )){ stop("Precip is missing \n"  ); return(NULL); } 
+      if(is.null(TempMean)){ stop("TempMean is missing \n"); return(NULL); } 
+      if(!is.vector( Precip) | !is.vector( TempMean)){ stop("Precip and TempMean must be vectors of numeric values \n"); return(NULL); } 
+      if(!is.numeric(Precip) | !is.numeric(TempMean)){ stop("Precip and TempMean must be vectors of numeric values \n"); return(NULL); } 
+      if(length(Precip)!=LLL | length(TempMean)!=LLL){ stop("Precip, TempMean and DatesR must have the same length \n"); return(NULL); } 
+      if(is.null(TempMin)!=is.null(TempMax)){ stop("TempMin and TempMax must be both defined if not null \n"); return(NULL); }
+      if(!is.null(TempMin) & !is.null(TempMax)){ 
+        if(!is.vector( TempMin) | !is.vector( TempMax)){ stop("TempMin and TempMax must be vectors of numeric values \n"); return(NULL); } 
+        if(!is.numeric(TempMin) | !is.numeric(TempMax)){ stop("TempMin and TempMax must be vectors of numeric values \n"); return(NULL); } 
+        if(length(TempMin)!=LLL | length(TempMax)!=LLL){ stop("TempMin, TempMax and DatesR must have the same length \n"); return(NULL); }
+      }
+      if(!is.null(HypsoData)){ 
+        if(!is.vector( HypsoData)){ stop("HypsoData must be a vector of numeric values  if not null \n"); return(NULL); } 
+        if(!is.numeric(HypsoData)){ stop("HypsoData must be a vector of numeric values  if not null \n"); return(NULL); } 
+        if(length(HypsoData)!=101){ stop("HypsoData must be of length 101 if not null \n"); return(NULL); } 
+        if(sum(is.na(HypsoData))!=0 & sum(is.na(HypsoData))!=101){ stop("HypsoData must not contain any NA if not null \n"); return(NULL); } 
+      }
+      if(!is.null(ZInputs)){
+        if(length(ZInputs)!=1                   ){ stop("\t ZInputs must be a single numeric value if not null \n"); return(NULL); } 
+        if(is.na(ZInputs) | !is.numeric(ZInputs)){ stop("\t ZInputs must be a single numeric value if not null \n"); return(NULL); } 
+      }
+      if(is.null(HypsoData)){ 
+        if(!quiet){ warning("\t HypsoData is missing => a single layer is used and no extrapolation is made \n"); }
+        HypsoData <- as.numeric(rep(NA,101)); ZInputs <- as.numeric(NA); NLayers <- as.integer(1);
+      }
+      if(is.null(ZInputs)){ 
+        if(!quiet & !identical(HypsoData,as.numeric(rep(NA,101)))){ warning("\t ZInputs is missing => HypsoData[51] is used \n"); }
+        ZInputs <- HypsoData[51];
+      }
+    }
+
+
+  ##check_NA_values
+    BOOL_NA <- rep(FALSE,length(DatesR));
+    if("GR" %in% ObjectClass){
+      BOOL_NA_TMP <- (Precip  < 0) | is.na(Precip );  if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < 0 or NA values detected in Precip series  \n"); } } 
+      BOOL_NA_TMP <- (PotEvap < 0) | is.na(PotEvap);  if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < 0 or NA values detected in PotEvap series \n"); } } 
+    }
+    if("CemaNeige" %in% ObjectClass){
+      BOOL_NA_TMP <- (Precip  < 0    ) | is.na(Precip  );  if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < 0 or NA values detected in Precip series       \n"); } } 
+      BOOL_NA_TMP <- (TempMean<(-150)) | is.na(TempMean);  if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < -150) or NA values detected in TempMean series \n"); } }
+      if(!is.null(TempMin) & !is.null(TempMax)){
+      BOOL_NA_TMP <- (TempMin<(-150)) | is.na(TempMin);  if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < -150) or NA values detected in TempMin series \n"); } }
+      BOOL_NA_TMP <- (TempMax<(-150)) | is.na(TempMax);  if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < -150) or NA values detected in TempMax series \n"); } } }
+    }
+    if(sum(BOOL_NA)!=0){
+      WTxt <- NULL;
+      WTxt <- paste(WTxt,"\t Missing values are not allowed in InputsModel \n",sep="");
+      Select <- (max(which(BOOL_NA))+1):length(BOOL_NA);
+      if(Select[1]>Select[2]){ stop(paste("time series could not be trunced since missing values were detected at the list time-step  \n",sep="")); return(NULL); }
+      if("GR" %in% ObjectClass){
+        Precip <- Precip[Select];  PotEvap <- PotEvap[Select]; }
+      if("CemaNeige" %in% ObjectClass){
+        Precip <- Precip[Select];  TempMean <- TempMean[Select]; if(!is.null(TempMin) & !is.null(TempMax)){ TempMin <- TempMin[Select]; TempMax <- TempMax[Select]; } }
+      WTxt <- paste(WTxt,"\t -> data were trunced to keep the most recent available time-steps \n",sep="");
+      WTxt <- paste(WTxt,"\t -> ",length(Select)," time-steps were kept \n",sep="");
+      if(!is.null(WTxt) & !quiet){ warning(WTxt); }
+    }
+
+
+  ##DataAltiExtrapolation_HBAN
+    if("CemaNeige" %in% ObjectClass){
+      RESULT <- DataAltiExtrapolation_HBAN(DatesR=DatesR,Precip=Precip,TempMean=TempMean,TempMin=TempMin,TempMax=TempMax,ZInputs=ZInputs,HypsoData=HypsoData,NLayers=NLayers,quiet=quiet);
+      if(!quiet){ if(NLayers==1){ cat(paste("\t Input series were successfully created on 1 elevation layer for use by CemaNeige \n",sep=""));
+                         } else { cat(paste("\t Input series were successfully created on ",NLayers," elevation layers for use by CemaNeige \n",sep="")); } }
+    }
+
+
+  ##Create_InputsModel
+    InputsModel <- list(DatesR=DatesR);
+    if("GR" %in% ObjectClass){
+      InputsModel <- c(InputsModel,list(Precip=as.double(Precip),PotEvap=as.double(PotEvap)));    }
+    if("CemaNeige" %in% ObjectClass){
+      InputsModel <- c(InputsModel,list(LayerPrecip=RESULT$LayerPrecip,LayerTempMean=RESULT$LayerTempMean,
+                                        LayerFracSolidPrecip=RESULT$LayerFracSolidPrecip,ZLayers=RESULT$ZLayers));    }
+
+    class(InputsModel) <- c("InputsModel",ObjectClass);
+    return(InputsModel);
+
+
+}
+
diff --git a/R/CreateRunOptions.R b/R/CreateRunOptions.R
new file mode 100644
index 00000000..f5c778d8
--- /dev/null
+++ b/R/CreateRunOptions.R
@@ -0,0 +1,260 @@
+#*************************************************************************************************
+#' Creation of the RunOptions object required to the RunModel functions.
+#'
+#' Users wanting to use FUN_MOD functions that are not included in 
+#' the package must create their own RunOptions object accordingly.
+#' 
+#' ##### Initialisation options #####
+#' 
+#' The model initialisation options can either be set to a default configuration or be defined by the user.
+#' 
+#' This is done via three vectors: \cr \emph{IndPeriod_WarmUp}, \emph{IniStates}, \emph{IniResLevels}. \cr
+#' A default configuration is used for initialisation if these vectors are not defined.
+#' 
+#' (1) Default initialisation options:
+#' 
+#' \itemize{
+#' \item \emph{IndPeriod_WarmUp} default setting ensures a one-year warm-up using the time-steps preceding the \emph{IndPeriod_Run}. 
+#' The actual length of this warm-up might be shorter depending on data availability (no missing value being allowed on model input series).
+#' 
+#' \item \emph{IniStates} and \emph{IniResLevels} are automatically set to initialise all the model states at 0, except for the production and routing stores which are initialised at 50\% of their capacity. This initialisation is made at the very beginning of the model call (i.e. at the beginning of \emph{IndPeriod_WarmUp} or at the beginning of IndPeriod_Run if the warm-up period is disabled).
+#' }
+#' 
+#' (2) Customisation of initialisation options:
+#' 
+#' \itemize{
+#' \item \emph{IndPeriod_WarmUp} can be used to specify the indices of the warm-up period (within the time-series prepared in InputsModel). \cr
+#' - remark 1:	for most common cases, indices corresponding to one or several years preceding \emph{IndPeriod_Run} are used (e.g. \emph{IndPeriod_WarmUp <- 1000:1365} and \emph{IndPeriod_Run <- 1366:5000)}. \cr
+#' However, it is also possible to perform a long-term initialisation if other indices than the warm-up ones are set in \emph{IndPeriod_WarmUp} (e.g. \emph{IndPeriod_WarmUp <- c( 1:5000 , 1:5000 , 1:5000 ,1000:1365 )}). \cr
+#' - remark 2:	it is also possible to completely disable the warm-up period when using \emph{IndPeriod_WarmUp <- 0}.
+#' 
+#' \item \emph{IniStates} and \emph{IniResLevels} can be used to specify the initial model states. \cr
+#' - remark 1:	if \emph{IniStates} is used, all model states must be provided (e.g. 60 floats [mm] are required for GR4J, GR5J and GR6J; 60+2*NLayers floats [mm] are required for CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J; see fortran source code for details). \cr
+#' - remark 2:	in addition to \emph{IniStates}, \emph{IniResLevels} allows to set the filling rate of the production and routing stores for the GR models. For instance for GR4J, GR5J and GR6J: \emph{IniResLevels <- c(0.3,0.5)} should be used to obtain initial fillings of 30\% and 50\% for the production and routing stores, respectively.  \emph{IniResLevels} is optional and can only be used if \emph{IniStates} is also defined (the state values corresponding to these two stores in \emph{IniStates} are not used in such case). \cr \cr
+#' }
+#*************************************************************************************************
+#' @title  Creation of the RunOptions object required to the RunModel functions
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}
+#' @example tests/example_RunModel.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________
+#' @param  FUN_MOD             [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  IndPeriod_WarmUp    (optional) [numeric] index of period to be used for the model warm-up [-]
+#' @param  IndPeriod_Run       [numeric] index of period to be used for the model run [-]
+#' @param  IniStates           (optional) [numeric] vector of initial model states [mm]
+#' @param  IniResLevels        (optional) [numeric] vector of initial filling rates for production and routing stores (2 values between 0 and 1) [-]
+#' @param  Outputs_Cal         (optional) [character] vector giving the outputs needed for the calibration \cr (e.g. c("Qsim")), the least outputs the fastest the calibration
+#' @param  Outputs_Sim         (optional) [character] vector giving the requested outputs \cr (e.g. c("DatesR","Qsim","SnowPack")), default="all"
+#' @param  RunSnowModule       (optional) [boolean] option indicating whether CemaNeige should be activated, default=TRUE
+#' @param  MeanAnSolidPrecip   (optional) [numeric] vector giving the annual mean of average solid precipitation for each layer (computed from InputsModel if not defined) [mm/y]
+#' @param  quiet               (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________
+#' @return  [list] object of class \emph{RunOptions} containing the data required to evaluate the model outputs; it can include the following:
+#'          \tabular{ll}{
+#'          \emph{IndPeriod_WarmUp }  \tab  [numeric] index of period to be used for the model warm-up [-] \cr
+#'          \emph{IndPeriod_Run    }  \tab  [numeric] index of period to be used for the model run [-] \cr
+#'          \emph{IniStates        }  \tab  [numeric] vector of initial model states [mm] \cr
+#'          \emph{IniResLevels     }  \tab  [numeric] vector of initial filling rates for production and routing stores [-] \cr
+#'          \emph{Outputs_Cal      }  \tab  [character] character vector giving only the outputs needed for the calibration \cr
+#'          \emph{Outputs_Sim      }  \tab  [character] character vector giving the requested outputs \cr
+#'          \emph{RunSnowModule    }  \tab  [boolean] option indicating whether CemaNeige should be activated \cr
+#'          \emph{MeanAnSolidPrecip}  \tab  [numeric] vector giving the annual mean of average solid precipitation for each layer [mm/y] \cr
+#'          }
+#**************************************************************************************************'
+CreateRunOptions <- function(FUN_MOD,InputsModel,IndPeriod_WarmUp=NULL,IndPeriod_Run,IniStates=NULL,IniResLevels=NULL,
+                             Outputs_Cal=NULL,Outputs_Sim="all",RunSnowModule=TRUE,MeanAnSolidPrecip=NULL,quiet=FALSE){
+
+
+  ObjectClass <- NULL;
+
+
+  ##check_FUN_MOD
+    BOOL <- FALSE;
+    if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_GR6J)){
+      ObjectClass <- c(ObjectClass,"GR","daily"); 
+      BOOL <- TRUE; 
+    }
+    if(identical(FUN_MOD,RunModel_CemaNeige)){
+      ObjectClass <- c(ObjectClass,"CemaNeige","daily");
+      BOOL <- TRUE; 
+    }
+    if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){
+      ObjectClass <- c(ObjectClass,"GR","CemaNeige","daily");
+      BOOL <- TRUE; 
+    }
+    if(!BOOL){ stop("incorrect FUN_MOD for use in CreateRunOptions \n"); return(NULL); } 
+
+
+  ##check_InputsModel
+    if(!inherits(InputsModel,"InputsModel")){
+      stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } 
+    if("daily" %in% ObjectClass & !inherits(InputsModel,"daily")){
+      stop("InputsModel must be of class 'daily' \n"); return(NULL); } 
+
+
+  ##check_IndPeriod_Run
+    if(!is.vector( IndPeriod_Run)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } 
+    if(!is.numeric(IndPeriod_Run)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } 
+    if(identical(as.integer(IndPeriod_Run),as.integer(seq(from=IndPeriod_Run[1],to=tail(IndPeriod_Run,1),by=1)))==FALSE){
+      stop("IndPeriod_Run must be a continuous sequence of integers \n"); return(NULL); } 
+    if(storage.mode(IndPeriod_Run)!="integer"){ stop("IndPeriod_Run should be of type integer \n"); return(NULL); } 
+
+
+  ##check_IndPeriod_WarmUp
+    WTxt <- NULL;
+    if(is.null(IndPeriod_WarmUp)){
+      WTxt <- paste(WTxt,"\t Model warm-up period not defined -> default configuration used \n",sep="");
+      ##If_the_run_period_starts_at_the_very_beginning_of_the_time_series
+      if(IndPeriod_Run[1]==as.integer(1)){
+        IndPeriod_WarmUp <- as.integer(0);
+        WTxt <- paste(WTxt,"\t    No data were found for model warm-up! \n",sep="");
+      ##We_look_for_the_longest_period_preceeding_the_run_period_with_a_maximum_of_one_year
+      } else {
+        TmpDateR <- InputsModel$DatesR[IndPeriod_Run[1]] - 365*24*60*60; ### minimal date to start the warmup        
+        IndPeriod_WarmUp <- which(InputsModel$DatesR==max(InputsModel$DatesR[1],TmpDateR)) : (IndPeriod_Run[1]-1); 
+        if("daily"   %in% ObjectClass){ TimeStep <- as.integer(       24*60*60); }
+        if(length(IndPeriod_WarmUp)*TimeStep/(365*24*60*60)>=1){ 
+        WTxt <- paste(WTxt,"\t    The year preceding the run period is used \n",sep="");
+        } else {
+        WTxt <- paste(WTxt,"\t    Less than a year (without missing values) was found for model warm-up: \n",sep="");
+        WTxt <- paste(WTxt,"\t    Only ",length(IndPeriod_WarmUp)," time-steps are used!                 \n",sep=""); 
+        }
+      }
+    }
+    if(!is.null(IndPeriod_WarmUp)){
+      if(!is.vector( IndPeriod_WarmUp)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } 
+      if(!is.numeric(IndPeriod_WarmUp)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } 
+      if(storage.mode(IndPeriod_WarmUp)!="integer"){ stop("IndPeriod_Run should be of type integer \n"); return(NULL); } 
+      if(identical(IndPeriod_WarmUp,as.integer(0))){
+        WTxt <- paste(WTxt,"\t No warm-up period is used! \n",sep=""); }
+      if((IndPeriod_Run[1]-1)!=tail(IndPeriod_WarmUp,1)){ 
+        WTxt <- paste(WTxt,"\t Model warm-up period is not directly before the model run period \n",sep=""); }
+    }
+    if(!is.null(WTxt) & !quiet){ warning(WTxt); }
+
+
+  ##check_IniStates_and_IniResLevels
+    if(is.null(IniStates) & is.null(IniResLevels) & !quiet){ 
+      warning("\t Model states initialisation not defined -> default configuration used \n"); }
+    if("GR" %in% ObjectClass){ 
+      if("daily"   %in% ObjectClass){ NH <-    20; }
+    } else {
+      NH <- 0;
+    }
+    if("CemaNeige" %in% ObjectClass){ NLayers <- length(InputsModel$LayerPrecip); } else { NLayers <- 0; }
+    NState <- 3*NH + 2*NLayers;
+    if(!is.null(IniStates)){
+      if(!is.vector( IniStates)   ){ stop("IniStates must be a vector of numeric values \n"); return(NULL);  }
+      if(!is.numeric(IniStates)   ){ stop("IniStates must be a vector of numeric values \n"); return(NULL);  }
+      if(length(IniStates)!=NState){ stop(paste("the length of IniStates must be ",NState," for the chosen FUN_MOD \n",sep="")); return(NULL);  }
+    } else {
+      IniStates <- as.double(rep(0.0,NState));
+    }
+    if(!is.null(IniResLevels)){
+      if(!is.vector(IniResLevels) ){ stop("IniResLevels must be a vector of numeric values \n"); return(NULL);  }
+      if(!is.numeric(IniResLevels)){ stop("IniResLevels must be a vector of numeric values \n"); return(NULL);  }
+      if(length(IniResLevels)!=2 ) { stop("the length of IniStates must be 2 for the chosen FUN_MOD \n"); return(NULL);  }
+    } else {
+      if("GR" %in% ObjectClass){ IniResLevels <- as.double(c(0.3,0.5)); }
+    }
+
+
+  ##check_Outputs_Cal_and_Sim
+
+    ##Outputs_all
+      Outputs_all <- NULL;
+      if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR4J)){
+        Outputs_all <- c(Outputs_all,"PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); }
+      if(identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J)){
+        Outputs_all <- c(Outputs_all,"PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); }
+      if(identical(FUN_MOD,RunModel_GR6J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){
+        Outputs_all <- c(Outputs_all,"PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QR1","Exp","QD","Qsim"); }
+      if("CemaNeige" %in% ObjectClass){
+        Outputs_all <- c(Outputs_all,"Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt"); }
+
+    ##check_Outputs_Sim
+      if(!is.vector(   Outputs_Sim)){ stop("Outputs_Sim must be a vector of characters \n"); return(NULL);  }
+      if(!is.character(Outputs_Sim)){ stop("Outputs_Sim must be a vector of characters \n"); return(NULL);  }
+      if(sum(is.na(Outputs_Sim))!=0){ stop("Outputs_Sim must not contain NA \n"); return(NULL);  }
+      if("all" %in% Outputs_Sim){ Outputs_Sim <- c("DatesR",Outputs_all,"StateEnd");  }
+      Test <- which(Outputs_Sim %in% c("DatesR",Outputs_all,"StateEnd") == FALSE); if(length(Test)!=0){ 
+        stop(paste("Outputs_Sim is incorrectly defined: ",paste(Outputs_Sim[Test],collapse=", ")," not found \n",sep="")); return(NULL); } 
+      Outputs_Sim <- Outputs_Sim[!duplicated(Outputs_Sim)];
+
+    ##check_Outputs_Cal
+      if(is.null(Outputs_Cal)){
+        if("GR" %in% ObjectClass                               ){ Outputs_Cal <- c("Qsim"); }
+        if("CemaNeige" %in% ObjectClass                        ){ Outputs_Cal <- c("all"); }
+        if("GR" %in% ObjectClass & "CemaNeige" %in% ObjectClass){ Outputs_Cal <- c("PliqAndMelt","Qsim"); }
+      } else {
+        if(!is.vector(   Outputs_Cal)){ stop("Outputs_Cal must be a vector of characters \n"); return(NULL);  }
+        if(!is.character(Outputs_Cal)){ stop("Outputs_Cal must be a vector of characters \n"); return(NULL);  }
+        if(sum(is.na(Outputs_Cal))!=0){ stop("Outputs_Cal must not contain NA \n"); return(NULL);  }
+      }
+      if("all" %in% Outputs_Cal){ Outputs_Cal <- c("DatesR",Outputs_all,"StateEnd");  }
+      Test <- which(Outputs_Cal %in% c("DatesR",Outputs_all,"StateEnd") == FALSE); if(length(Test)!=0){ 
+        stop(paste("Outputs_Cal is incorrectly defined: ",paste(Outputs_Cal[Test],collapse=", ")," not found \n",sep="")); return(NULL); } 
+      Outputs_Cal <- Outputs_Cal[!duplicated(Outputs_Cal)];
+
+
+  ##check_RunSnowModule
+    if("CemaNeige" %in% ObjectClass){
+      if(!is.vector( RunSnowModule)){ stop("RunSnowModule must be a single boolean \n"); return(NULL);  }
+      if(!is.logical(RunSnowModule)){ stop("RunSnowModule must be either TRUE or FALSE \n"); return(NULL);  }
+      if(length(RunSnowModule)!=1  ){ stop("RunSnowModule must be either TRUE or FALSE \n"); return(NULL);  }
+    }
+
+
+  ##check_MeanAnSolidPrecip
+    if("CemaNeige" %in% ObjectClass & is.null(MeanAnSolidPrecip)){
+      NLayers <- length(InputsModel$LayerPrecip);
+      SolidPrecip <- NULL; for(iLayer in 1:NLayers){
+        if(iLayer==1){ SolidPrecip <- InputsModel$LayerFracSolidPrecip[[1]]*InputsModel$LayerPrecip[[iLayer]]/NLayers;
+              } else { SolidPrecip <- SolidPrecip + InputsModel$LayerFracSolidPrecip[[iLayer]]*InputsModel$LayerPrecip[[iLayer]]/NLayers; } }
+      Factor <- NULL;
+      if(inherits(InputsModel,"hourly" )){ Factor <- 365.25*24; }
+      if(inherits(InputsModel,"daily"  )){ Factor <-    365.25; }
+      if(inherits(InputsModel,"monthly")){ Factor <-        12; }
+      if(inherits(InputsModel,"yearly" )){ Factor <-         1; }
+      if(is.null(Factor)){ stop("InputsModel must be of class 'hourly', 'daily', 'monthly' or 'yearly' \n"); return(NULL);  }
+      MeanAnSolidPrecip <- rep(mean(SolidPrecip)*Factor,NLayers); ### default value: same Gseuil for all layers
+      if(!quiet){ warning("\t MeanAnSolidPrecip not defined -> it was automatically set to c(",paste(round(MeanAnSolidPrecip),collapse=","),") \n"); }
+    }
+    if("CemaNeige" %in% ObjectClass & !is.null(MeanAnSolidPrecip)){
+      if(!is.vector( MeanAnSolidPrecip)    ){ stop(paste("MeanAnSolidPrecip must be a vector of numeric values \n",sep="")); return(NULL);  }
+      if(!is.numeric(MeanAnSolidPrecip)    ){ stop(paste("MeanAnSolidPrecip must be a vector of numeric values \n",sep="")); return(NULL);  }
+      if(length(MeanAnSolidPrecip)!=NLayers){ stop(paste("MeanAnSolidPrecip must be a numeric vector of length ",NLayers," \n",sep="")); return(NULL);  }
+    }
+
+
+  ##check_PliqAndMelt
+    if(RunSnowModule & "GR" %in% ObjectClass & "CemaNeige" %in% ObjectClass){
+      if("PliqAndMelt" %in% Outputs_Cal == FALSE & "all" %in% Outputs_Cal == FALSE){
+        WTxt <- NULL;
+        WTxt <- paste(WTxt,"\t PliqAndMelt was not defined in Outputs_Cal but is needed to feed the hydrological model with the snow module outputs \n",sep="");
+        WTxt <- paste(WTxt,"\t -> it was automatically added \n",sep="");
+        if(!is.null(WTxt) & !quiet){ warning(WTxt); }
+        Outputs_Cal <- c(Outputs_Cal,"PliqAndMelt"); }
+      if("PliqAndMelt" %in% Outputs_Sim == FALSE & "all" %in% Outputs_Sim == FALSE){
+        WTxt <- NULL;
+        WTxt <- paste(WTxt,"\t PliqAndMelt was not defined in Outputs_Sim but is needed to feed the hydrological model with the snow module outputs \n",sep="");
+        WTxt <- paste(WTxt,"\t -> it was automatically added \n",sep="");
+        if(!is.null(WTxt) & !quiet){ warning(WTxt); }
+        Outputs_Sim <- c(Outputs_Sim,"PliqAndMelt"); }
+    }
+
+
+  ##Create_RunOptions
+    RunOptions <- list(IndPeriod_WarmUp=IndPeriod_WarmUp,IndPeriod_Run=IndPeriod_Run,IniStates=IniStates,IniResLevels=IniResLevels,
+                       Outputs_Cal=Outputs_Cal,Outputs_Sim=Outputs_Sim);
+    if("CemaNeige" %in% ObjectClass){
+        RunOptions <- c(RunOptions,list(RunSnowModule=RunSnowModule,MeanAnSolidPrecip=MeanAnSolidPrecip));    }
+    class(RunOptions) <- c("RunOptions",ObjectClass);
+    return(RunOptions);
+
+
+}
+
diff --git a/R/DataAltiExtrapolation_HBAN.R b/R/DataAltiExtrapolation_HBAN.R
new file mode 100644
index 00000000..7a5354b6
--- /dev/null
+++ b/R/DataAltiExtrapolation_HBAN.R
@@ -0,0 +1,540 @@
+#*****************************************************************************************************************
+#' Function which extrapolates the precipitation and air temperature series for different elevation layers (method from Valery, 2010).
+#'
+#' Elevation layers of equal surface are created the 101 elevation quantiles (\emph{HypsoData}) 
+#' and the number requested elevation layers (\emph{NLayers}). \cr
+#' Forcing data (precipitation and air temperature) are extrapolated using gradients from Valery (2010).
+#' (e.g. gradP=0.0004 [m-1] for France and gradT=0.434 [degreC/100m] for January, 1st). \cr
+#' This function is used by the \emph{CreateInputsModel} function. \cr
+#*****************************************************************************************************************
+#' @title   Altitudinal extrapolation of precipitation and temperature series
+#' @author  Laurent Coron, Pierre Brigode (June 2014)
+#' @references
+#'   Turcotte, R., L.-G. Fortin, V. Fortin, J.-P. Fortin and J.-P. Villeneuve (2007), 
+#'       Operational analysis of the spatial distribution and the temporal evolution of the snowpack water equivalent 
+#'       in southern Quebec, Canada, Nordic Hydrology, 38(3), 211, doi:10.2166/nh.2007.009. \cr
+#'   Valéry, A. (2010), Modélisation précipitations-débit sous influence nivale ? : Elaboration d'un module neige 
+#'       et évaluation sur 380 bassins versants, PhD thesis (in french), AgroParisTech, Paris, France. \cr
+#'   USACE (1956), Snow Hydrology, pp. 437, U.S. Army Coprs of Engineers (USACE) North Pacific Division, Portland, Oregon, USA.
+#' @seealso \code{\link{CreateInputsModel}}, \code{\link{RunModel_CemaNeigeGR4J}}
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  DatesR      [POSIXlt] vector of dates
+#' @param  Precip      [numeric] time series of daily total precipitation (catchment average) [mm]
+#' @param  TempMean    [numeric] time series of daily mean air temperature [degC]
+#' @param  TempMin     (optional) [numeric] time series of daily min air temperature [degC]
+#' @param  TempMax     (optional) [numeric] time series of daily max air temperature [degC]
+#' @param  ZInputs     [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]
+#' @param  HypsoData   [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m]
+#' @param  NLayers     [numeric] integer giving the number of elevation layers requested [-]
+#' @param  quiet       (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  list containing the extrapolated series of precip. and air temp. on each elevation layer
+#'          \tabular{ll}{                                                                                                      
+#'            \emph{$LayerPrecip         }  \tab  [list] list of time series of daily precipitation (layer average) [mm]           \cr
+#'            \emph{$LayerTempMean       }  \tab  [list] list of time series of daily mean air temperature (layer average) [degC]  \cr
+#'            \emph{$LayerTempMin        }  \tab  [list] list of time series of daily min air temperature (layer average) [degC]   \cr
+#'            \emph{$LayerTempMax        }  \tab  [list] list of time series of daily max air temperature (layer average) [degC]   \cr
+#'            \emph{$LayerFracSolidPrecip}  \tab  [list] list of time series of daily solid precip. fract. (layer average) [-]     \cr
+#'            \emph{$ZLayers             }  \tab  [numeric] vector of median elevation for each layer                              \cr
+#'          }                                                                                                                  
+#*****************************************************************************************************************
+DataAltiExtrapolation_HBAN <- function(DatesR,Precip,TempMean,TempMin=NULL,TempMax=NULL,ZInputs,HypsoData,NLayers,quiet=FALSE){
+
+
+    ##Altitudinal_gradient_functions_______________________________________________________________
+      ##unique_gradient_for_precipitation
+      GradP_Valery2010 <- function(){ 
+        return(0.00041); ### value from Val? PhD thesis page 126
+      }
+      ##daily_gradients_for_mean_min_and_max_air_temperature
+      GradT_Valery2010 <- function(){ 
+        RESULT <- matrix(c(
+               1,  1, 0.434, 0.366, 0.498,
+               2,  1, 0.434, 0.366, 0.500,
+               3,  1, 0.435, 0.367, 0.501,
+               4,  1, 0.436, 0.367, 0.503,
+               5,  1, 0.437, 0.367, 0.504,
+               6,  1, 0.439, 0.367, 0.506,
+               7,  1, 0.440, 0.367, 0.508,
+               8,  1, 0.441, 0.368, 0.510,
+               9,  1, 0.442, 0.368, 0.512,
+              10,  1, 0.444, 0.368, 0.514,
+              11,  1, 0.445, 0.368, 0.517,
+              12,  1, 0.446, 0.368, 0.519,
+              13,  1, 0.448, 0.369, 0.522,
+              14,  1, 0.450, 0.369, 0.525,
+              15,  1, 0.451, 0.369, 0.527,
+              16,  1, 0.453, 0.370, 0.530,
+              17,  1, 0.455, 0.370, 0.533,
+              18,  1, 0.456, 0.370, 0.537,
+              19,  1, 0.458, 0.371, 0.540,
+              20,  1, 0.460, 0.371, 0.543,
+              21,  1, 0.462, 0.371, 0.547,
+              22,  1, 0.464, 0.372, 0.550,
+              23,  1, 0.466, 0.372, 0.554,
+              24,  1, 0.468, 0.373, 0.558,
+              25,  1, 0.470, 0.373, 0.561,
+              26,  1, 0.472, 0.374, 0.565,
+              27,  1, 0.474, 0.374, 0.569,
+              28,  1, 0.476, 0.375, 0.573,
+              29,  1, 0.478, 0.375, 0.577,
+              30,  1, 0.480, 0.376, 0.582,
+              31,  1, 0.483, 0.376, 0.586,
+               1,  2, 0.485, 0.377, 0.590,
+               2,  2, 0.487, 0.377, 0.594,
+               3,  2, 0.489, 0.378, 0.599,
+               4,  2, 0.492, 0.379, 0.603,
+               5,  2, 0.494, 0.379, 0.607,
+               6,  2, 0.496, 0.380, 0.612,
+               7,  2, 0.498, 0.381, 0.616,
+               8,  2, 0.501, 0.381, 0.621,
+               9,  2, 0.503, 0.382, 0.625,
+              10,  2, 0.505, 0.383, 0.630,
+              11,  2, 0.508, 0.384, 0.634,
+              12,  2, 0.510, 0.384, 0.639,
+              13,  2, 0.512, 0.385, 0.643,
+              14,  2, 0.515, 0.386, 0.648,
+              15,  2, 0.517, 0.387, 0.652,
+              16,  2, 0.519, 0.387, 0.657,
+              17,  2, 0.522, 0.388, 0.661,
+              18,  2, 0.524, 0.389, 0.666,
+              19,  2, 0.526, 0.390, 0.670,
+              20,  2, 0.528, 0.391, 0.674,
+              21,  2, 0.530, 0.392, 0.679,
+              22,  2, 0.533, 0.393, 0.683,
+              23,  2, 0.535, 0.393, 0.687,
+              24,  2, 0.537, 0.394, 0.691,
+              25,  2, 0.539, 0.395, 0.695,
+              26,  2, 0.541, 0.396, 0.699,
+              27,  2, 0.543, 0.397, 0.703,
+              28,  2, 0.545, 0.398, 0.707,
+              29,  2, 0.546, 0.399, 0.709,
+               1,  3, 0.547, 0.399, 0.711,
+               2,  3, 0.549, 0.400, 0.715,
+               3,  3, 0.551, 0.401, 0.718,
+               4,  3, 0.553, 0.402, 0.722,
+               5,  3, 0.555, 0.403, 0.726,
+               6,  3, 0.557, 0.404, 0.729,
+               7,  3, 0.559, 0.405, 0.732,
+               8,  3, 0.560, 0.406, 0.736,
+               9,  3, 0.562, 0.406, 0.739,
+              10,  3, 0.564, 0.407, 0.742,
+              11,  3, 0.566, 0.408, 0.745,
+              12,  3, 0.567, 0.409, 0.748,
+              13,  3, 0.569, 0.410, 0.750,
+              14,  3, 0.570, 0.411, 0.753,
+              15,  3, 0.572, 0.412, 0.756,
+              16,  3, 0.573, 0.413, 0.758,
+              17,  3, 0.575, 0.414, 0.761,
+              18,  3, 0.576, 0.415, 0.763,
+              19,  3, 0.577, 0.416, 0.765,
+              20,  3, 0.579, 0.417, 0.767,
+              21,  3, 0.580, 0.417, 0.769,
+              22,  3, 0.581, 0.418, 0.771,
+              23,  3, 0.582, 0.419, 0.773,
+              24,  3, 0.583, 0.420, 0.774,
+              25,  3, 0.584, 0.421, 0.776,
+              26,  3, 0.585, 0.422, 0.777,
+              27,  3, 0.586, 0.422, 0.779,
+              28,  3, 0.587, 0.423, 0.780,
+              29,  3, 0.588, 0.424, 0.781,
+              30,  3, 0.589, 0.425, 0.782,
+              31,  3, 0.590, 0.425, 0.783,
+               1,  4, 0.591, 0.426, 0.784,
+               2,  4, 0.591, 0.427, 0.785,
+               3,  4, 0.592, 0.427, 0.785,
+               4,  4, 0.593, 0.428, 0.786,
+               5,  4, 0.593, 0.429, 0.787,
+               6,  4, 0.594, 0.429, 0.787,
+               7,  4, 0.595, 0.430, 0.787,
+               8,  4, 0.595, 0.431, 0.788,
+               9,  4, 0.596, 0.431, 0.788,
+              10,  4, 0.596, 0.432, 0.788,
+              11,  4, 0.597, 0.432, 0.788,
+              12,  4, 0.597, 0.433, 0.788,
+              13,  4, 0.597, 0.433, 0.788,
+              14,  4, 0.598, 0.434, 0.788,
+              15,  4, 0.598, 0.434, 0.788,
+              16,  4, 0.598, 0.435, 0.787,
+              17,  4, 0.599, 0.435, 0.787,
+              18,  4, 0.599, 0.436, 0.787,
+              19,  4, 0.599, 0.436, 0.786,
+              20,  4, 0.599, 0.436, 0.786,
+              21,  4, 0.600, 0.437, 0.785,
+              22,  4, 0.600, 0.437, 0.785,
+              23,  4, 0.600, 0.437, 0.784,
+              24,  4, 0.600, 0.438, 0.784,
+              25,  4, 0.600, 0.438, 0.783,
+              26,  4, 0.601, 0.438, 0.783,
+              27,  4, 0.601, 0.438, 0.782,
+              28,  4, 0.601, 0.439, 0.781,
+              29,  4, 0.601, 0.439, 0.781,
+              30,  4, 0.601, 0.439, 0.780,
+               1,  5, 0.601, 0.439, 0.779,
+               2,  5, 0.601, 0.439, 0.778,
+               3,  5, 0.601, 0.439, 0.778,
+               4,  5, 0.601, 0.440, 0.777,
+               5,  5, 0.601, 0.440, 0.776,
+               6,  5, 0.601, 0.440, 0.775,
+               7,  5, 0.601, 0.440, 0.775,
+               8,  5, 0.601, 0.440, 0.774,
+               9,  5, 0.601, 0.440, 0.773,
+              10,  5, 0.602, 0.440, 0.772,
+              11,  5, 0.602, 0.440, 0.772,
+              12,  5, 0.602, 0.440, 0.771,
+              13,  5, 0.602, 0.440, 0.770,
+              14,  5, 0.602, 0.440, 0.770,
+              15,  5, 0.602, 0.440, 0.769,
+              16,  5, 0.602, 0.440, 0.768,
+              17,  5, 0.602, 0.440, 0.768,
+              18,  5, 0.602, 0.440, 0.767,
+              19,  5, 0.602, 0.440, 0.767,
+              20,  5, 0.602, 0.440, 0.766,
+              21,  5, 0.602, 0.440, 0.766,
+              22,  5, 0.602, 0.440, 0.765,
+              23,  5, 0.602, 0.440, 0.765,
+              24,  5, 0.602, 0.440, 0.764,
+              25,  5, 0.602, 0.440, 0.764,
+              26,  5, 0.602, 0.440, 0.764,
+              27,  5, 0.602, 0.439, 0.763,
+              28,  5, 0.602, 0.439, 0.763,
+              29,  5, 0.602, 0.439, 0.763,
+              30,  5, 0.602, 0.439, 0.762,
+              31,  5, 0.602, 0.439, 0.762,
+               1,  6, 0.602, 0.439, 0.762,
+               2,  6, 0.602, 0.439, 0.762,
+               3,  6, 0.602, 0.439, 0.762,
+               4,  6, 0.602, 0.439, 0.762,
+               5,  6, 0.602, 0.439, 0.762,
+               6,  6, 0.602, 0.438, 0.761,
+               7,  6, 0.602, 0.438, 0.761,
+               8,  6, 0.602, 0.438, 0.761,
+               9,  6, 0.602, 0.438, 0.761,
+              10,  6, 0.602, 0.438, 0.761,
+              11,  6, 0.602, 0.438, 0.762,
+              12,  6, 0.602, 0.438, 0.762,
+              13,  6, 0.602, 0.438, 0.762,
+              14,  6, 0.602, 0.438, 0.762,
+              15,  6, 0.602, 0.437, 0.762,
+              16,  6, 0.602, 0.437, 0.762,
+              17,  6, 0.602, 0.437, 0.762,
+              18,  6, 0.602, 0.437, 0.762,
+              19,  6, 0.602, 0.437, 0.763,
+              20,  6, 0.602, 0.437, 0.763,
+              21,  6, 0.602, 0.437, 0.763,
+              22,  6, 0.602, 0.436, 0.763,
+              23,  6, 0.602, 0.436, 0.763,
+              24,  6, 0.602, 0.436, 0.764,
+              25,  6, 0.602, 0.436, 0.764,
+              26,  6, 0.601, 0.436, 0.764,
+              27,  6, 0.601, 0.436, 0.764,
+              28,  6, 0.601, 0.436, 0.764,
+              29,  6, 0.601, 0.435, 0.765,
+              30,  6, 0.601, 0.435, 0.765,
+               1,  7, 0.601, 0.435, 0.765,
+               2,  7, 0.600, 0.435, 0.765,
+               3,  7, 0.600, 0.435, 0.765,
+               4,  7, 0.600, 0.434, 0.766,
+               5,  7, 0.600, 0.434, 0.766,
+               6,  7, 0.599, 0.434, 0.766,
+               7,  7, 0.599, 0.434, 0.766,
+               8,  7, 0.599, 0.434, 0.766,
+               9,  7, 0.598, 0.433, 0.766,
+              10,  7, 0.598, 0.433, 0.766,
+              11,  7, 0.598, 0.433, 0.766,
+              12,  7, 0.597, 0.433, 0.766,
+              13,  7, 0.597, 0.432, 0.767,
+              14,  7, 0.597, 0.432, 0.767,
+              15,  7, 0.596, 0.432, 0.767,
+              16,  7, 0.596, 0.432, 0.766,
+              17,  7, 0.595, 0.431, 0.766,
+              18,  7, 0.595, 0.431, 0.766,
+              19,  7, 0.594, 0.431, 0.766,
+              20,  7, 0.594, 0.430, 0.766,
+              21,  7, 0.593, 0.430, 0.766,
+              22,  7, 0.593, 0.430, 0.766,
+              23,  7, 0.592, 0.429, 0.765,
+              24,  7, 0.592, 0.429, 0.765,
+              25,  7, 0.591, 0.428, 0.765,
+              26,  7, 0.590, 0.428, 0.765,
+              27,  7, 0.590, 0.428, 0.764,
+              28,  7, 0.589, 0.427, 0.764,
+              29,  7, 0.588, 0.427, 0.764,
+              30,  7, 0.588, 0.426, 0.763,
+              31,  7, 0.587, 0.426, 0.763,
+               1,  8, 0.586, 0.425, 0.762,
+               2,  8, 0.586, 0.425, 0.762,
+               3,  8, 0.585, 0.424, 0.761,
+               4,  8, 0.584, 0.424, 0.761,
+               5,  8, 0.583, 0.423, 0.760,
+               6,  8, 0.583, 0.423, 0.760,
+               7,  8, 0.582, 0.422, 0.759,
+               8,  8, 0.581, 0.421, 0.758,
+               9,  8, 0.580, 0.421, 0.758,
+              10,  8, 0.579, 0.420, 0.757,
+              11,  8, 0.578, 0.420, 0.756,
+              12,  8, 0.578, 0.419, 0.755,
+              13,  8, 0.577, 0.418, 0.754,
+              14,  8, 0.576, 0.418, 0.754,
+              15,  8, 0.575, 0.417, 0.753,
+              16,  8, 0.574, 0.416, 0.752,
+              17,  8, 0.573, 0.415, 0.751,
+              18,  8, 0.572, 0.415, 0.750,
+              19,  8, 0.571, 0.414, 0.749,
+              20,  8, 0.570, 0.413, 0.748,
+              21,  8, 0.569, 0.413, 0.747,
+              22,  8, 0.569, 0.412, 0.746,
+              23,  8, 0.568, 0.411, 0.745,
+              24,  8, 0.567, 0.410, 0.744,
+              25,  8, 0.566, 0.409, 0.743,
+              26,  8, 0.565, 0.409, 0.742,
+              27,  8, 0.564, 0.408, 0.741,
+              28,  8, 0.563, 0.407, 0.740,
+              29,  8, 0.562, 0.406, 0.738,
+              30,  8, 0.561, 0.405, 0.737,
+              31,  8, 0.560, 0.405, 0.736,
+               1,  9, 0.558, 0.404, 0.735,
+               2,  9, 0.557, 0.403, 0.734,
+               3,  9, 0.556, 0.402, 0.732,
+               4,  9, 0.555, 0.401, 0.731,
+               5,  9, 0.554, 0.401, 0.730,
+               6,  9, 0.553, 0.400, 0.728,
+               7,  9, 0.552, 0.399, 0.727,
+               8,  9, 0.551, 0.398, 0.725,
+               9,  9, 0.550, 0.397, 0.724,
+              10,  9, 0.549, 0.396, 0.723,
+              11,  9, 0.548, 0.396, 0.721,
+              12,  9, 0.546, 0.395, 0.720,
+              13,  9, 0.545, 0.394, 0.718,
+              14,  9, 0.544, 0.393, 0.717,
+              15,  9, 0.543, 0.392, 0.715,
+              16,  9, 0.542, 0.391, 0.713,
+              17,  9, 0.541, 0.391, 0.712,
+              18,  9, 0.540, 0.390, 0.710,
+              19,  9, 0.538, 0.389, 0.709,
+              20,  9, 0.537, 0.388, 0.707,
+              21,  9, 0.536, 0.388, 0.705,
+              22,  9, 0.535, 0.387, 0.703,
+              23,  9, 0.533, 0.386, 0.702,
+              24,  9, 0.532, 0.385, 0.700,
+              25,  9, 0.531, 0.385, 0.698,
+              26,  9, 0.530, 0.384, 0.696,
+              27,  9, 0.528, 0.383, 0.694,
+              28,  9, 0.527, 0.383, 0.692,
+              29,  9, 0.526, 0.382, 0.690,
+              30,  9, 0.525, 0.381, 0.688,
+               1, 10, 0.523, 0.381, 0.686,
+               2, 10, 0.522, 0.380, 0.684,
+               3, 10, 0.521, 0.379, 0.682,
+               4, 10, 0.519, 0.379, 0.680,
+               5, 10, 0.518, 0.378, 0.678,
+               6, 10, 0.517, 0.377, 0.676,
+               7, 10, 0.515, 0.377, 0.674,
+               8, 10, 0.514, 0.376, 0.671,
+               9, 10, 0.512, 0.376, 0.669,
+              10, 10, 0.511, 0.375, 0.667,
+              11, 10, 0.510, 0.375, 0.664,
+              12, 10, 0.508, 0.374, 0.662,
+              13, 10, 0.507, 0.374, 0.659,
+              14, 10, 0.505, 0.373, 0.657,
+              15, 10, 0.504, 0.373, 0.654,
+              16, 10, 0.502, 0.372, 0.652,
+              17, 10, 0.501, 0.372, 0.649,
+              18, 10, 0.499, 0.372, 0.647,
+              19, 10, 0.498, 0.371, 0.644,
+              20, 10, 0.496, 0.371, 0.641,
+              21, 10, 0.495, 0.371, 0.639,
+              22, 10, 0.493, 0.370, 0.636,
+              23, 10, 0.492, 0.370, 0.633,
+              24, 10, 0.490, 0.370, 0.630,
+              25, 10, 0.489, 0.369, 0.628,
+              26, 10, 0.487, 0.369, 0.625,
+              27, 10, 0.485, 0.369, 0.622,
+              28, 10, 0.484, 0.368, 0.619,
+              29, 10, 0.482, 0.368, 0.616,
+              30, 10, 0.481, 0.368, 0.613,
+              31, 10, 0.479, 0.368, 0.610,
+               1, 11, 0.478, 0.368, 0.607,
+               2, 11, 0.476, 0.367, 0.604,
+               3, 11, 0.475, 0.367, 0.601,
+               4, 11, 0.473, 0.367, 0.598,
+               5, 11, 0.471, 0.367, 0.595,
+               6, 11, 0.470, 0.367, 0.592,
+               7, 11, 0.468, 0.367, 0.589,
+               8, 11, 0.467, 0.366, 0.586,
+               9, 11, 0.465, 0.366, 0.583,
+              10, 11, 0.464, 0.366, 0.580,
+              11, 11, 0.462, 0.366, 0.577,
+              12, 11, 0.461, 0.366, 0.574,
+              13, 11, 0.459, 0.366, 0.571,
+              14, 11, 0.458, 0.366, 0.568,
+              15, 11, 0.456, 0.366, 0.565,
+              16, 11, 0.455, 0.366, 0.562,
+              17, 11, 0.454, 0.366, 0.559,
+              18, 11, 0.452, 0.365, 0.556,
+              19, 11, 0.451, 0.365, 0.553,
+              20, 11, 0.450, 0.365, 0.550,
+              21, 11, 0.448, 0.365, 0.547,
+              22, 11, 0.447, 0.365, 0.544,
+              23, 11, 0.446, 0.365, 0.542,
+              24, 11, 0.445, 0.365, 0.539,
+              25, 11, 0.443, 0.365, 0.536,
+              26, 11, 0.442, 0.365, 0.533,
+              27, 11, 0.441, 0.365, 0.531,
+              28, 11, 0.440, 0.365, 0.528,
+              29, 11, 0.439, 0.365, 0.526,
+              30, 11, 0.438, 0.365, 0.523,
+               1, 12, 0.437, 0.365, 0.521,
+               2, 12, 0.436, 0.365, 0.519,
+               3, 12, 0.435, 0.365, 0.517,
+               4, 12, 0.434, 0.365, 0.515,
+               5, 12, 0.434, 0.365, 0.513,
+               6, 12, 0.433, 0.365, 0.511,
+               7, 12, 0.432, 0.365, 0.509,
+               8, 12, 0.431, 0.365, 0.507,
+               9, 12, 0.431, 0.365, 0.505,
+              10, 12, 0.430, 0.365, 0.504,
+              11, 12, 0.430, 0.365, 0.502,
+              12, 12, 0.429, 0.365, 0.501,
+              13, 12, 0.429, 0.365, 0.500,
+              14, 12, 0.429, 0.365, 0.498,
+              15, 12, 0.428, 0.365, 0.497,
+              16, 12, 0.428, 0.365, 0.496,
+              17, 12, 0.428, 0.365, 0.496,
+              18, 12, 0.428, 0.365, 0.495,
+              19, 12, 0.428, 0.365, 0.494,
+              20, 12, 0.428, 0.365, 0.494,
+              21, 12, 0.428, 0.365, 0.494,
+              22, 12, 0.428, 0.365, 0.493,
+              23, 12, 0.429, 0.365, 0.493,
+              24, 12, 0.429, 0.366, 0.493,
+              25, 12, 0.429, 0.366, 0.493,
+              26, 12, 0.430, 0.366, 0.494,
+              27, 12, 0.430, 0.366, 0.494,
+              28, 12, 0.431, 0.366, 0.495,
+              29, 12, 0.431, 0.366, 0.495,
+              30, 12, 0.432, 0.366, 0.496,
+              31, 12, 0.433, 0.366, 0.497),ncol=5,byrow=TRUE);
+        dimnames(RESULT) <- list(1:366,c("day","month","grad_Tmean","grad_Tmin","grad_Tmax"));
+        return(RESULT);
+      }
+
+
+
+    ##Format_______________________________________________________________________________________
+      HypsoData <- as.double(HypsoData);
+      ZInputs   <- as.double(ZInputs);
+
+
+    ##ElevationLayers_Creation_____________________________________________________________________
+      ZLayers   <-  as.double(rep(NA,NLayers));
+      if(!identical(HypsoData,as.double(rep(NA,101)))){
+        nmoy   <- 100 %/% NLayers;
+        nreste <- 100 %% NLayers;
+        ncont  <- 0;
+        for(iLayer in 1:NLayers){
+          if(nreste > 0){ nn <- nmoy+1; nreste <- nreste-1; } else { nn <- nmoy; }
+          if(nn==1){ ZLayers[iLayer] <- HypsoData[ncont+1]; }
+          if(nn==2){ ZLayers[iLayer] <- 0.5 * (HypsoData[ncont+1] + HypsoData[ncont+2]); }
+          if(nn>2 ){ ZLayers[iLayer] <- HypsoData[ncont+nn/2]; }
+          ncont <- ncont+nn;
+        }
+      }
+  
+
+    ##Precipitation_extrapolation__________________________________________________________________
+      ##Initialisation
+      LayerPrecip <- list();
+      if(identical(ZInputs,HypsoData[51]) & NLayers==1){
+        LayerPrecip[[1]] <- as.double(Precip);
+      } else {
+      ##Elevation_gradients_for_daily_mean_precipitation
+        GradP    <- GradP_Valery2010(); ### single value
+        TabGradP <- rep(GradP,length(Precip));
+      ##Extrapolation
+        ##Thresold_of_inputs_median_elevation
+        Zthreshold <- 4000;
+        ##_On_each_elevation_layer...
+        for(iLayer in 1:NLayers){
+          ##If_layer_elevation_smaller_than_Zthreshold
+          if(ZLayers[iLayer] <= Zthreshold){ 
+            LayerPrecip[[iLayer]] <- as.double(Precip*exp(TabGradP*(ZLayers[iLayer]-ZInputs))); 
+          ##If_layer_elevation_greater_than_Zthreshold
+          } else {
+            ##If_inputs_median_elevation_smaller_than_Zthreshold
+            if(ZInputs <= Zthreshold){ LayerPrecip[[iLayer]] <- as.double(Precip*exp(TabGradP*(Zthreshold-ZInputs)));
+            ##If_inputs_median_elevation_greater_then_Zthreshold
+            } else { LayerPrecip[[iLayer]] <- as.double(Precip); }
+          }
+        }
+      }
+
+
+
+    ##Temperature_extrapolation____________________________________________________________________
+      ##Initialisation
+      LayerTempMean <- list(); LayerTempMin <- list(); LayerTempMax <- list();
+      if(identical(ZInputs,HypsoData[51]) & NLayers==1){
+        LayerTempMean[[1]] <- as.double(TempMean);
+        if(!is.null(TempMin) & !is.null(TempMax)){ LayerTempMin[[1]] <- as.double(TempMin); LayerTempMax[[1]] <- as.double(TempMax); }
+      } else {
+      ##Elevation_gradients_for_daily_mean_min_and_max_temperature
+        GradT    <- GradT_Valery2010(); ### Day, Month, GradTmean, GradTmin and GradTmax for iCol=1,2,3,4,5, respectively
+        TabGradT <- matrix(NA,nrow=length(Precip),ncol=3);
+        for(iday in 1:366){
+          ind <- which(as.numeric(format(DatesR,format="%d"))==GradT[iday,1] & as.numeric(format(DatesR,format="%m"))==GradT[iday,2]);
+          TabGradT[ind,1:3] <- GradT[iday,3:5];
+        }
+      ##Extrapolation
+        ##On_each_elevation_layer...
+        for(iLayer in 1:NLayers){
+          LayerTempMean[[iLayer]] <- as.double(TempMean + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,1])/100);
+          if(!is.null(TempMin) & !is.null(TempMax)){
+          LayerTempMin[[iLayer]]  <- as.double(TempMin  + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,2])/100);
+          LayerTempMax[[iLayer]]  <- as.double(TempMax  + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,3])/100);
+          }
+        }
+      }
+
+
+ 
+    ##Solid_Fraction_for_each_elevation_layer______________________________________________________
+      LayerFracSolidPrecip <- list();
+      ##Thresold_of_inputs_median_elevation
+      Zthreshold <- 1500;
+      ##On_each_elevation_layer...
+      for(iLayer in 1:NLayers){
+        Option <- "USACE";
+        if(!is.na(ZInputs)){ if(ZInputs < Zthreshold & !is.null(TempMin) & !is.null(TempMax)){ Option <- "Hydrotel"; } }
+        ##Turcotte_formula_from_Hydrotel
+        if(Option=="Hydrotel"){
+          TempMin <- LayerTempMin[[iLayer]];
+          TempMax <- LayerTempMax[[iLayer]];
+          SolidFraction <- 1 - TempMax/(TempMax - TempMin);
+          SolidFraction[TempMin >= 0] <- 0;
+          SolidFraction[TempMax <= 0] <- 1;
+        }
+        ##USACE_formula
+        if(Option=="USACE"){
+          USACE_Tmin <- -1.0;
+          USACE_Tmax <-  3.0;
+          TempMean <- LayerTempMean[[iLayer]];
+          SolidFraction <- 1- (TempMean - USACE_Tmin)/(USACE_Tmax - USACE_Tmin);
+          SolidFraction[TempMean > USACE_Tmax] <- 0;
+          SolidFraction[TempMean < USACE_Tmin] <- 1;
+        }
+        LayerFracSolidPrecip[[iLayer]] <- as.double(SolidFraction);
+      }
+
+
+
+
+    ##END__________________________________________________________________________________________
+    return(list(LayerPrecip=LayerPrecip,LayerTempMean=LayerTempMean,LayerTempMin=LayerTempMin,LayerTempMax=LayerTempMax,
+                LayerFracSolidPrecip=LayerFracSolidPrecip,ZLayers=ZLayers));
+
+}
+
+
diff --git a/R/ErrorCrit.R b/R/ErrorCrit.R
new file mode 100644
index 00000000..fe874c83
--- /dev/null
+++ b/R/ErrorCrit.R
@@ -0,0 +1,22 @@
+#*****************************************************************************************************************
+#' Function which computes an error criterion with the provided function.
+#*****************************************************************************************************************
+#' @title  Error criterion using the provided function
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}
+#' @example tests/example_ErrorCrit.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsCrit      [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  OutputsModel    [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details
+#' @param  FUN_CRIT        [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)
+#' @param  quiet           (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs, see \code{\link{ErrorCrit_RMSE}} or \code{\link{ErrorCrit_NSE}} for details
+#*****************************************************************************************************************'
+ErrorCrit <- function(InputsCrit,OutputsModel,FUN_CRIT,quiet=FALSE){
+    return( FUN_CRIT(InputsCrit,OutputsModel,quiet=quiet) )
+}
+
diff --git a/R/ErrorCrit_KGE.R b/R/ErrorCrit_KGE.R
new file mode 100644
index 00000000..96406587
--- /dev/null
+++ b/R/ErrorCrit_KGE.R
@@ -0,0 +1,122 @@
+#*****************************************************************************************************************
+#' Function which computes an error criterion based on the KGE formula proposed by Gupta et al. (2009).
+#'
+#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows 
+#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised 
+#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+#*****************************************************************************************************************
+#' @title  Error criterion based on the KGE formula
+#' @author Laurent Coron (June 2014)
+#' @references
+#'   Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009), 
+#'       Decomposition of the mean squared error and NSE performance criteria: Implications
+#'       for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr
+#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE2}}
+#' @examples ## see example of the ErrorCrit function
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsCrit      [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  OutputsModel    [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details
+#' @param  quiet           (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:
+#'          \tabular{ll}{
+#'          \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+#'          \emph{$CritName       }   \tab   [character] name of the criterion \cr
+#'          \emph{$SubCritValues  }   \tab   [numeric] values of the sub-criteria \cr
+#'          \emph{$SubCritNames   }   \tab   [character] names of the sub-criteria \cr
+#'          \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+#'          \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+#'          \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+#'          }
+#*****************************************************************************************************************
+ErrorCrit_KGE <- function(InputsCrit,OutputsModel,quiet=FALSE){
+
+
+##Arguments_check________________________________
+  if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); }  
+  if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); }  
+
+
+##Initialisation_________________________________
+  CritName <- NA;
+  if(InputsCrit$transfo==""    ){ CritName <- "KGE[Q]"      ; }
+  if(InputsCrit$transfo=="sqrt"){ CritName <- "KGE[sqrt(Q)]"; }
+  if(InputsCrit$transfo=="log" ){ CritName <- "KGE[log(Q)]" ; }
+  if(InputsCrit$transfo=="inv" ){ CritName <- "KGE[1/Q]"    ; }
+  if(InputsCrit$transfo=="sort"){ CritName <- "KGE[sort(Q)]"; }
+  CritValue       <- NA;
+  CritBestValue   <- +1;
+  Multiplier      <- -1; ### must be equal to -1 or +1 only
+
+
+##Data_preparation_______________________________
+  VarObs <- InputsCrit$Qobs  ; VarObs[!InputsCrit$BoolCrit] <- NA; 
+  VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA;  
+  ##Data_transformation
+  if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){
+    VarObs <- VarObs + InputsCrit$epsilon;
+    VarSim <- VarSim + InputsCrit$epsilon;
+  } }
+  if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
+  if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
+  if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
+  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  ##TS_ignore
+  TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
+  if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); }
+  if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); }  
+  ##Other_variables_preparation
+  meanVarObs <- mean(VarObs[!TS_ignore]);
+  meanVarSim <- mean(VarSim[!TS_ignore]);
+  iCrit           <- 0;
+  SubCritNames    <- NULL;
+  SubCritValues   <- NULL;
+
+
+
+##SubErrorCrit_____KGE_rPearson__________________
+  iCrit <- iCrit+1;
+  SubCritNames[iCrit]  <- paste(CritName," rPEARSON(sim vs. obs)",sep="");
+  SubCritValues[iCrit] <- NA;
+  Numer <- sum( (VarObs[!TS_ignore]-meanVarObs)*(VarSim[!TS_ignore]-meanVarSim) );
+  Deno1 <- sqrt( sum((VarObs[!TS_ignore]-meanVarObs)^2) );
+  Deno2 <- sqrt( sum((VarSim[!TS_ignore]-meanVarSim)^2) );
+  if(Numer==0){ if(Deno1==0 & Deno2==0){ Crit <- 1; } else { Crit <- 0; } 
+  } else { Crit  <- Numer/(Deno1*Deno2); }
+  if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; }
+
+
+##SubErrorCrit_____KGE_alpha_____________________
+  iCrit <- iCrit+1;
+  SubCritNames[iCrit]  <-  paste(CritName," STDEVsim/STDEVobs",sep="");
+  SubCritValues[iCrit] <- NA;
+  Numer <- sd(VarSim[!TS_ignore]); 
+  Denom <- sd(VarObs[!TS_ignore]); 
+  if(Numer==0 & Denom==0){ Crit <- 1; } else { Crit <- Numer/Denom ; }
+  if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; }
+
+
+##SubErrorCrit_____KGE_beta______________________  
+  iCrit <- iCrit+1;
+  SubCritNames[iCrit]  <-  paste(CritName," MEANsim/MEANobs",sep="");
+  SubCritValues[iCrit] <- NA;
+  if(meanVarSim==0 & meanVarObs==0){ Crit <- 1; } else { Crit <- meanVarSim/meanVarObs ; }
+  if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; }
+
+
+##ErrorCrit______________________________________
+  if(sum(is.na(SubCritValues))==0){
+  CritValue <- ( 1 - sqrt( (SubCritValues[1]-1)^2 + (SubCritValues[2]-1)^2 + (SubCritValues[3]-1)^2 ) );
+  }
+
+
+##Output_________________________________________
+  OutputsCrit <- list(CritValue,CritName,SubCritValues,SubCritNames,CritBestValue,Multiplier,which(TS_ignore));
+  names(OutputsCrit) <- c("CritValue","CritName","SubCritValues","SubCritNames","CritBestValue","Multiplier","Ind_notcomputed");
+  return(OutputsCrit);
+
+}
+
+
diff --git a/R/ErrorCrit_KGE2.R b/R/ErrorCrit_KGE2.R
new file mode 100644
index 00000000..d4424d72
--- /dev/null
+++ b/R/ErrorCrit_KGE2.R
@@ -0,0 +1,124 @@
+#*****************************************************************************************************************
+#' Function which computes an error criterion based on the KGE' formula proposed by Kling et al. (2012).
+#'
+#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows 
+#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised 
+#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+#*****************************************************************************************************************
+#' @title  Error criterion based on the KGE' formula
+#' @author Laurent Coron (June 2014)
+#' @references
+#'   Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009), 
+#'       Decomposition of the mean squared error and NSE performance criteria: Implications
+#'       for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr
+#'   Kling, H., Fuchs, M. and Paulin, M. (2012), 
+#'       Runoff conditions in the upper Danube basin under an ensemble of climate change scenarios,
+#'       Journal of Hydrology, 424-425, 264-277, doi:10.1016/j.jhydrol.2012.01.011.
+#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}
+#' @examples ## see example of the ErrorCrit function
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsCrit      [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  OutputsModel    [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details
+#' @param  quiet           (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:
+#'          \tabular{ll}{
+#'          \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+#'          \emph{$CritName       }   \tab   [character] name of the criterion \cr
+#'          \emph{$SubCritValues  }   \tab   [numeric] values of the sub-criteria \cr
+#'          \emph{$SubCritNames   }   \tab   [character] names of the sub-criteria \cr
+#'          \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+#'          \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+#'          \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+#'          }
+#*****************************************************************************************************************'
+ErrorCrit_KGE2 <- function(InputsCrit,OutputsModel,quiet=FALSE){
+
+
+##Arguments_check________________________________
+  if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); }  
+  if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); }  
+
+
+##Initialisation_________________________________
+  CritName <- NA;
+  if(InputsCrit$transfo==""    ){ CritName <- "KGE'[Q]"      ; }
+  if(InputsCrit$transfo=="sqrt"){ CritName <- "KGE'[sqrt(Q)]"; }
+  if(InputsCrit$transfo=="log" ){ CritName <- "KGE'[log(Q)]" ; }
+  if(InputsCrit$transfo=="inv" ){ CritName <- "KGE'[1/Q]"    ; }
+  if(InputsCrit$transfo=="sort"){ CritName <- "KGE'[sort(Q)]"; }
+  CritValue       <- NA;
+  CritBestValue   <- +1;
+  Multiplier      <- -1; ### must be equal to -1 or +1 only
+
+
+##Data_preparation_______________________________
+  VarObs <- InputsCrit$Qobs  ; VarObs[!InputsCrit$BoolCrit] <- NA; 
+  VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA;  
+  ##Data_transformation
+  if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){
+    VarObs <- VarObs + InputsCrit$epsilon;
+    VarSim <- VarSim + InputsCrit$epsilon;
+  } }
+  if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
+  if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
+  if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
+  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  ##TS_ignore
+  TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
+  if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); }
+  if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); }  
+  ##Other_variables_preparation
+  meanVarObs <- mean(VarObs[!TS_ignore]);
+  meanVarSim <- mean(VarSim[!TS_ignore]);
+  iCrit           <- 0;
+  SubCritNames    <- NULL;
+  SubCritValues   <- NULL;
+
+
+##SubErrorCrit_____KGE_rPearson__________________
+  iCrit <- iCrit+1;
+  SubCritNames[iCrit]  <- paste(CritName," rPEARSON(sim vs. obs)",sep="");
+  SubCritValues[iCrit] <- NA;
+  Numer <- sum( (VarObs[!TS_ignore]-meanVarObs)*(VarSim[!TS_ignore]-meanVarSim) );
+  Deno1 <- sqrt( sum((VarObs[!TS_ignore]-meanVarObs)^2) );
+  Deno2 <- sqrt( sum((VarSim[!TS_ignore]-meanVarSim)^2) );
+  if(Numer==0){ if(Deno1==0 & Deno2==0){ Crit <- 1; } else { Crit <- 0; } 
+  } else { Crit  <- Numer/(Deno1*Deno2); }
+  if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; }
+
+
+##SubErrorCrit_____KGE_gama______________________
+  iCrit <- iCrit+1;
+  SubCritNames[iCrit]  <-  paste(CritName," CVsim/CVobs",sep="");
+  SubCritValues[iCrit] <- NA;
+  if(meanVarSim==0){ if(sd(VarSim[!TS_ignore])==0){ CVsim <- 1; } else { CVsim <- 99999; } } else { CVsim <- sd(VarSim[!TS_ignore])/meanVarSim; }
+  if(meanVarObs==0){ if(sd(VarObs[!TS_ignore])==0){ CVobs <- 1; } else { CVobs <- 99999; } } else { CVobs <- sd(VarObs[!TS_ignore])/meanVarObs; }
+  if(CVsim==0 & CVobs==0){ Crit <- 1; } else { Crit <- CVsim/CVobs ; }
+  if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; }
+
+
+##SubErrorCrit_____KGE_beta______________________
+  iCrit <- iCrit+1;
+  SubCritNames[iCrit]  <-  paste(CritName," MEANsim/MEANobs",sep="");
+  SubCritValues[iCrit] <- NA;
+  if(meanVarSim==0 & meanVarObs==0){ Crit <- 1; } else { Crit <- meanVarSim/meanVarObs ; }
+  if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; }
+
+
+##ErrorCrit______________________________________
+  if(sum(is.na(SubCritValues))==0){
+  CritValue <- ( 1 - sqrt( (SubCritValues[1]-1)^2 + (SubCritValues[2]-1)^2 + (SubCritValues[3]-1)^2 ) );
+  }
+
+
+##Output_________________________________________
+  OutputsCrit <- list(CritValue,CritName,SubCritValues,SubCritNames,CritBestValue,Multiplier,which(TS_ignore));
+  names(OutputsCrit) <- c("CritValue","CritName","SubCritValues","SubCritNames","CritBestValue","Multiplier","Ind_notcomputed");
+  return(OutputsCrit);
+
+}
+
+
diff --git a/R/ErrorCrit_NSE.R b/R/ErrorCrit_NSE.R
new file mode 100644
index 00000000..7fcbb3ab
--- /dev/null
+++ b/R/ErrorCrit_NSE.R
@@ -0,0 +1,87 @@
+#*****************************************************************************************************************
+#' Function which computes an error criterion based on the NSE formula proposed by Nash & Sutcliffe (1970).
+#'
+#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows 
+#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised 
+#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+#*****************************************************************************************************************
+#' @title  Error criterion based on the NSE formula
+#' @author Laurent Coron (June 2014)
+#' @references
+#'   Nash, J.E. and Sutcliffe, J.V. (1970), 
+#'       River flow forecasting through conceptual models part 1.
+#'       A discussion of principles, Journal of Hydrology, 10(3), 282-290, doi:10.1016/0022-1694(70)90255-6. \cr
+#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}}
+#' @examples ## see example of the ErrorCrit function
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsCrit      [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  OutputsModel    [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details
+#' @param  quiet           (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:
+#'          \tabular{ll}{
+#'          \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+#'          \emph{$CritName       }   \tab   [character] name of the criterion \cr
+#'          \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+#'          \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+#'          \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+#'          }
+#*****************************************************************************************************************
+ErrorCrit_NSE <- function(InputsCrit,OutputsModel,quiet=FALSE){
+
+
+##Arguments_check________________________________
+  if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); }  
+  if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); }  
+
+
+##Initialisation_________________________________
+  CritName <- NA;
+  if(InputsCrit$transfo==""    ){ CritName <- "NSE[Q]"      ; }
+  if(InputsCrit$transfo=="sqrt"){ CritName <- "NSE[sqrt(Q)]"; }
+  if(InputsCrit$transfo=="log" ){ CritName <- "NSE[log(Q)]" ; }
+  if(InputsCrit$transfo=="inv" ){ CritName <- "NSE[1/Q]"    ; }
+  if(InputsCrit$transfo=="sort"){ CritName <- "NSE[sort(Q)]"; }
+  CritValue       <- NA;
+  CritBestValue   <- +1;
+  Multiplier      <- -1; ### must be equal to -1 or +1 only
+
+
+##Data_preparation_______________________________
+  VarObs <- InputsCrit$Qobs  ; VarObs[!InputsCrit$BoolCrit] <- NA; 
+  VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA;  
+  ##Data_transformation
+  if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){
+    VarObs <- VarObs + InputsCrit$epsilon;
+    VarSim <- VarSim + InputsCrit$epsilon;
+  } }
+  if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
+  if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
+  if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
+  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  ##TS_ignore
+  TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
+  if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); }
+  if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); }  
+  ##Other_variables_preparation
+  meanVarObs <- mean(VarObs[!TS_ignore]);
+  meanVarSim <- mean(VarSim[!TS_ignore]);
+
+
+##ErrorCrit______________________________________
+  Emod <- sum((VarSim[!TS_ignore]-VarObs[!TS_ignore])^2);
+  Eref <- sum((VarObs[!TS_ignore]-mean(VarObs[!TS_ignore]))^2);
+  if(Emod==0 & Eref==0){ Crit <- 0; } else { Crit <- (1-Emod/Eref); }
+  if(is.numeric(Crit) & is.finite(Crit)){ CritValue <- Crit; }
+
+
+##Output_________________________________________
+  OutputsCrit <- list(CritValue,CritName,CritBestValue,Multiplier,which(TS_ignore));
+  names(OutputsCrit) <- c("CritValue","CritName","CritBestValue","Multiplier","Ind_notcomputed");
+  return(OutputsCrit);
+
+}
+
+
diff --git a/R/ErrorCrit_RMSE.R b/R/ErrorCrit_RMSE.R
new file mode 100644
index 00000000..a5da7a3e
--- /dev/null
+++ b/R/ErrorCrit_RMSE.R
@@ -0,0 +1,81 @@
+#*****************************************************************************************************************
+#' Function which computes an error criterion based on the root mean square error (RMSE).
+#'
+#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows 
+#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised 
+#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+#*****************************************************************************************************************
+#' @title  Error criterion based on the RMSE
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}}
+#' @examples ## see example of the ErrorCrit function
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsCrit      [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details
+#' @param  OutputsModel    [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details
+#' @param  quiet           (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:
+#'          \tabular{ll}{
+#'          \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+#'          \emph{$CritName       }   \tab   [character] name of the criterion \cr
+#'          \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+#'          \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+#'          \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+#'          }
+#*****************************************************************************************************************
+ErrorCrit_RMSE <- function(InputsCrit,OutputsModel,quiet=FALSE){
+
+
+##Arguments_check________________________________
+  if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); }  
+  if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); }  
+
+
+##Initialisation_________________________________
+  CritName <- NA;
+  if(InputsCrit$transfo==""    ){ CritName <- "RMSE[Q]"      ; }
+  if(InputsCrit$transfo=="sqrt"){ CritName <- "RMSE[sqrt(Q)]"; }
+  if(InputsCrit$transfo=="log" ){ CritName <- "RMSE[log(Q)]" ; }
+  if(InputsCrit$transfo=="inv" ){ CritName <- "RMSE[1/Q]"    ; }
+  if(InputsCrit$transfo=="sort"){ CritName <- "RMSE[sort(Q)]"; }
+
+  CritValue       <- NA;
+  CritBestValue   <- +1;
+  Multiplier      <- -1; ### must be equal to -1 or +1 only
+
+
+##Data_preparation_______________________________
+  VarObs <- InputsCrit$Qobs  ; VarObs[!InputsCrit$BoolCrit] <- NA; 
+  VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA;  
+  ##Data_transformation
+  if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){
+    VarObs <- VarObs + InputsCrit$epsilon;
+    VarSim <- VarSim + InputsCrit$epsilon;
+  } }
+  if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
+  if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
+  if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
+  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  ##TS_ignore
+  TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
+  if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); }
+  if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); }  
+
+
+##ErrorCrit______________________________________
+  Numer <- sum((VarSim-VarObs)^2,na.rm=TRUE);
+  Denom <- sum(!is.na(VarObs));
+  if(Numer==0){ Crit <- 0; } else { Crit <- sqrt(Numer/Denom); }
+  if(is.numeric(Crit) & is.finite(Crit)){ CritValue <- Crit; }
+
+
+##Output_________________________________________
+  OutputsCrit <- list(CritValue,CritName,CritBestValue,Multiplier,which(TS_ignore));
+  names(OutputsCrit) <- c("CritValue","CritName","CritBestValue","Multiplier","Ind_notcomputed");
+  return(OutputsCrit);
+
+}
+
+
diff --git a/R/PEdaily_Oudin.R b/R/PEdaily_Oudin.R
new file mode 100644
index 00000000..1f3b2c6d
--- /dev/null
+++ b/R/PEdaily_Oudin.R
@@ -0,0 +1,58 @@
+#*****************************************************************************************************************
+#' Function which computes daily PE using the formula from Oudin et al. (2005).
+#*****************************************************************************************************************
+#' @title   Computation of daily series of potential evapotranspiration with Oudin's formula
+#' @author  Laurent Coron (December 2013)
+#' @references
+#'   Oudin, L., F. Hervieu, C. Michel, C. Perrin, V. Andréassian, F. Anctil and C. Loumagne (2005),
+#'       Which potential evapotranspiration input for a lumped rainfall-runoff model?: Part 2-Towards a 
+#'       simple and efficient potential evapotranspiration model for rainfall-runoff modelling, Journal of Hydrology, 
+#'       303(1-4), 290-306, doi:10.1016/j.jhydrol.2004.08.026.
+#' @examples 
+#'    require(airGR)
+#'    data(L0123001)
+#'    PotEvap <- PEdaily_Oudin(JD=as.POSIXlt(BasinObs$DatesR)$yday,Temp=BasinObs$T,LatRad=0.8)
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param   JD       [numeric] time series of julian day [-]
+#' @param   Temp     [numeric] time series of daily mean air temperature [degC]
+#' @param   LatRad   [numeric] latitude of measurement for the temperature series [rad]
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [numeric] time series of daily potential evapotranspiration [mm/d]
+#*****************************************************************************************************************'
+PEdaily_Oudin <- function(JD,Temp,LatRad){
+
+    PE_Oudin_D <- rep(NA,length(Temp));
+    for(k in 1:length(Temp)){
+
+      FI <- LatRad  ### latitude in rad
+      ### FI <- LatDeg/(180/pi)  ### conversion from deg to rad
+      COSFI <- cos(FI)
+      AFI <- abs(LatRad/42.)
+     
+      TETA <- 0.4093*sin(JD[k]/58.1-1.405)
+      COSTETA <- cos(TETA)
+      COSGZ <- max(0.001,cos(FI-TETA))
+      GZ <- acos(COSGZ)
+      COSGZ2 <- COSGZ*COSGZ
+      if(COSGZ2 >= 1){ SINGZ <- 0. } else { SINGZ <- sqrt(1.-COSGZ2) }
+      COSOM <- 1.-COSGZ/COSFI/COSTETA
+      if(COSOM < -1.){ COSOM <- -1. }
+      if(COSOM >  1.){ COSOM <-  1. }
+      COSOM2 <- COSOM*COSOM
+      if(COSOM2 >= 1.){ SINOM <- 0. } else { SINOM <- sqrt(1.-COSOM2) }
+      OM <- acos(COSOM)
+      COSPZ <- COSGZ+COSFI*COSTETA*(SINOM/OM-1.)
+      if(COSPZ < 0.001){ COSPZ <- 0.001 }
+      ETA <- 1.+cos(JD[k]/58.1)/30.
+      GE <- 446.*OM*COSPZ*ETA
+      
+      if(Temp[k] >= -5.0) { PE_Oudin_D[k] <- GE*(Temp[k]+5.)/100./28.5 } else { PE_Oudin_D[k] <- 0 }
+
+    }
+
+    return(PE_Oudin_D);
+
+}
+
diff --git a/R/RunModel.R b/R/RunModel.R
new file mode 100644
index 00000000..4acfd1e2
--- /dev/null
+++ b/R/RunModel.R
@@ -0,0 +1,22 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run with the provided function.
+#*****************************************************************************************************************
+#' @title  Run with the provided hydrological model function
+#' @author Laurent Coron (June 2014)
+#' @seealso \code{\link{RunModel_GR4J}}, \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @example tests/example_RunModel.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of model parameters
+#' @param  FUN_MOD             [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details
+#*****************************************************************************************************************'
+RunModel <- function(InputsModel,RunOptions,Param,FUN_MOD){
+    return( FUN_MOD(InputsModel,RunOptions,Param) )
+}
+
diff --git a/R/RunModel_CemaNeige.R b/R/RunModel_CemaNeige.R
new file mode 100644
index 00000000..8122b4b5
--- /dev/null
+++ b/R/RunModel_CemaNeige.R
@@ -0,0 +1,131 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run for RunModel_CemaNeige.
+#'
+#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+#*****************************************************************************************************************
+#' @title Run with the CemaNeige snow module
+#' @author Laurent Coron (January 2014)
+#' @references
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? 
+#'       Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? 
+#'       Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+#' @seealso \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @example tests/example_RunModel_CemaNeige.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of 2 parameters                                                             
+#'                             \tabular{ll}{                                                                      
+#'                             CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+#'                             CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+#'                             }                                                                                  
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:                                         
+#'          \tabular{ll}{                                                                                         
+#'          \emph{$DatesR  }                                  \tab [POSIXlt] series of dates                                    \cr
+#'          \emph{$CemaNeigeLayers}                           \tab [list] list of CemaNeige outputs (1 list per layer)          \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                    \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                     \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                           \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]           \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                             \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm]                 \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm]                    \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm]   \cr
+#'          \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: CemaNeige states [mm & degC] \cr
+#'          }                                                                                                     
+#'          (refer to the provided references or to the package source code for further details on these model outputs)
+#*****************************************************************************************************************'
+RunModel_CemaNeige <- function(InputsModel,RunOptions,Param){
+
+    NParam <- 2;
+    FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt");
+
+    ##Arguments_check
+      if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+      if(inherits(InputsModel,"daily"      )==FALSE){ stop("InputsModel must be of class 'daily'       \n"); return(NULL); }  
+      if(inherits(InputsModel,"CemaNeige"  )==FALSE){ stop("InputsModel must be of class 'CemaNeige'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"RunOptions"  )==FALSE){ stop("RunOptions must be of class 'RunOptions'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"CemaNeige"   )==FALSE){ stop("RunOptions must be of class 'CemaNeige'    \n"); return(NULL); }  
+      if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); }
+      if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); }
+      Param <- as.double(Param);
+
+    ##Input_data_preparation
+      if(identical(RunOptions$IndPeriod_WarmUp,0)){ RunOptions$IndPeriod_WarmUp <- NULL; }
+      IndPeriod1    <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run);
+      IndPeriod2    <- (length(RunOptions$IndPeriod_WarmUp)+1):length(IndPeriod1);
+      ExportDatesR    <- "DatesR"   %in% RunOptions$Outputs_Sim;
+      ExportStateEnd  <- "StateEnd" %in% RunOptions$Outputs_Sim;
+
+
+
+    ##SNOW_MODULE________________________________________________________________________________##
+      ParamCemaNeige  <- Param;
+      NLayers         <- length(InputsModel$LayerPrecip);
+      if(sum(is.na(ParamCemaNeige))!=0){ stop("Param contains missing values \n"); return(NULL); }
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); 
+      } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim);  }
+      CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers";
+
+    ##Call_DLL_CemaNeige_________________________
+      for(iLayer in 1:NLayers){
+        StateStartCemaNeige <- RunOptions$IniStates[ (2*(iLayer-1)+1):(2*(iLayer-1)+2) ];
+        RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr",
+                        ##inputs
+                            LInputs=as.integer(length(IndPeriod1)),                                        ### length of input and output series
+                            InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1],                    ### input series of total precipitation [mm/d]
+                            InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1],  ### input series of fraction of solid precipitation [0-1]
+                            InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1],                        ### input series of air mean temperature [degC]
+                            MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer],                        ### value of annual mean solid precip [mm/y]
+                            NParam=as.integer(2),                                                          ### number of model parameter = 2
+                            Param=ParamCemaNeige,                                                          ### parameter set
+                            NStates=as.integer(2),                                                         ### number of state variables used for model initialising = 2
+                            StateStart=StateStartCemaNeige,                                                ### state variables used when the model run starts
+                            NOutputs=as.integer(length(IndOutputsCemaNeige)),                              ### number of output series
+                            IndOutputs=IndOutputsCemaNeige,                                                ### indices of output series
+                        ##outputs                                                               
+                            Outputs=matrix(as.double(-999.999),nrow=length(IndPeriod1),ncol=length(IndOutputsCemaNeige)),  ### output series [mm]
+                            StateEnd=rep(as.double(-999.999),as.integer(2))                                                ### state variables at the end of the model run (reservoir levels [mm] and HU)
+                         )
+        RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+        RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+
+        ##Data_storage
+        CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]);
+        names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige];
+        if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); }
+        rm(RESULTS); 
+      } ###ENDFOR_iLayer
+      names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep="");
+
+      ##Output_data_preparation
+      if(ExportDatesR==FALSE & ExportStateEnd==FALSE){
+        OutputsModel <- list(CemaNeigeLayers);
+        names(OutputsModel) <- NameCemaNeigeLayers;   }
+      if(ExportDatesR==TRUE & ExportStateEnd==FALSE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           list(CemaNeigeLayers) );
+        names(OutputsModel) <- c("DatesR",NameCemaNeigeLayers);   }
+      if(ExportDatesR==FALSE & ExportStateEnd==TRUE){
+        OutputsModel <- c( list(CemaNeigeLayers),
+                           CemaNeigeStateEnd );
+        names(OutputsModel) <- c(NameCemaNeigeLayers,"StateEnd");   }
+      if(ExportDatesR==TRUE & ExportStateEnd==TRUE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           list(CemaNeigeLayers),
+                           CemaNeigeStateEnd );
+        names(OutputsModel) <- c("DatesR",NameCemaNeigeLayers,"StateEnd");   }
+
+    ##End
+      class(OutputsModel) <- c("OutputsModel","daily","CemaNeige");
+      return(OutputsModel);
+
+}
+  
diff --git a/R/RunModel_CemaNeigeGR4J.R b/R/RunModel_CemaNeigeGR4J.R
new file mode 100644
index 00000000..70e81522
--- /dev/null
+++ b/R/RunModel_CemaNeigeGR4J.R
@@ -0,0 +1,208 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run for RunModel_CemaNeigeGR4J.
+#'
+#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+#*****************************************************************************************************************
+#' @title Run with the CemaNeigeGR4J hydrological model
+#' @author Laurent Coron (December 2013)
+#' @references
+#'   Perrin, C., C. Michel and V. Andréassian (2003), 
+#'       Improvement of a parsimonious model for streamflow simulation, 
+#'       Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7.
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? 
+#'       Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? 
+#'       Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+#' @seealso \code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR4J}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @example tests/example_RunModel_CemaNeigeGR4J.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of 6 parameters                                                             
+#'                             \tabular{ll}{                                                                      
+#'                             GR4J X1      \tab production store capacity [mm]                                \cr
+#'                             GR4J X2      \tab intercatchment exchange coefficient [mm/d]                    \cr
+#'                             GR4J X3      \tab routing store capacity [mm]                                   \cr
+#'                             GR4J X4      \tab unit hydrograph time constant [d]                             \cr
+#'                             CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+#'                             CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+#'                             }                                                                                  
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:                                         
+#'          \tabular{ll}{                                                                                         
+#'          \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+#'          \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+#'          \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+#'          \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+#'          \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+#'          \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+#'          \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+#'          \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+#'          \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+#'          \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+#'          \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+#'          \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+#'          \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+#'          \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+#'          \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+#'          \emph{$CemaNeigeLayers}   \tab [list] list of CemaNeige outputs (1 list per layer)                          \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                          \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                           \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                                 \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]                 \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                                   \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm/d]                     \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm/d]                        \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm/d]       \cr
+#'          \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr
+#'          }                                                                                                     
+#'          (refer to the provided references or to the package source code for further details on these model outputs)
+#*****************************************************************************************************************'
+RunModel_CemaNeigeGR4J <- function(InputsModel,RunOptions,Param){
+
+    NParam <- 6;
+    FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt");
+    FortranOutputsMod       <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim");
+
+    ##Arguments_check
+      if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+      if(inherits(InputsModel,"daily"      )==FALSE){ stop("InputsModel must be of class 'daily'       \n"); return(NULL); }  
+      if(inherits(InputsModel,"GR"         )==FALSE){ stop("InputsModel must be of class 'GR'          \n"); return(NULL); }  
+      if(inherits(InputsModel,"CemaNeige"  )==FALSE){ stop("InputsModel must be of class 'CemaNeige'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"RunOptions"  )==FALSE){ stop("RunOptions must be of class 'RunOptions'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"GR"          )==FALSE){ stop("RunOptions must be of class 'GR'           \n"); return(NULL); }  
+      if(inherits(RunOptions,"CemaNeige"   )==FALSE){ stop("RunOptions must be of class 'CemaNeige'    \n"); return(NULL); }  
+      if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); }
+      if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); }
+      Param <- as.double(Param);
+
+    ##Input_data_preparation
+      if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; }
+      IndPeriod1     <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run);
+      LInputSeries   <- as.integer(length(IndPeriod1))
+      IndPeriod2     <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries;
+      ParamCemaNeige <- Param[(length(Param)-1):length(Param)];
+      NParamMod      <- as.integer(length(Param)-2);
+      ParamMod       <- Param[1:NParamMod];
+      NLayers        <- length(InputsModel$LayerPrecip);
+      NStatesMod     <- as.integer(length(RunOptions$IniStates)-2*NLayers);
+      ExportDatesR   <- "DatesR"   %in% RunOptions$Outputs_Sim;
+      ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim;
+
+
+
+    ##SNOW_MODULE________________________________________________________________________________##
+    if(RunOptions$RunSnowModule==TRUE){
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); 
+      } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim);  }
+      CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers";
+
+    ##Call_DLL_CemaNeige_________________________
+      for(iLayer in 1:NLayers){
+        StateStartCemaNeige <- RunOptions$IniStates[ (NStatesMod+2*(iLayer-1)+1):(NStatesMod+2*(iLayer-1)+2) ];
+        RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr",
+                        ##inputs
+                            LInputs=LInputSeries,                                                          ### length of input and output series
+                            InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1],                    ### input series of total precipitation [mm/d]
+                            InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1],  ### input series of fraction of solid precipitation [0-1]
+                            InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1],                        ### input series of air mean temperature [degC]
+                            MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer],                        ### value of annual mean solid precip [mm/y]
+                            NParam=as.integer(2),                                                          ### number of model parameter = 2
+                            Param=ParamCemaNeige,                                                          ### parameter set
+                            NStates=as.integer(2),                                                         ### number of state variables used for model initialising = 2
+                            StateStart=StateStartCemaNeige,                                                ### state variables used when the model run starts
+                            NOutputs=as.integer(length(IndOutputsCemaNeige)),                              ### number of output series
+                            IndOutputs=IndOutputsCemaNeige,                                                ### indices of output series
+                        ##outputs                                                               
+                            Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsCemaNeige)),  ### output series [mm]
+                            StateEnd=rep(as.double(-999.999),as.integer(2))                                          ### state variables at the end of the model run (reservoir levels [mm] and HU)
+                         )
+        RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+        RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+
+        ##Data_storage
+        CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]);
+        names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige];
+        IndPliqAndMelt <- which(names(CemaNeigeLayers[[iLayer]]) == "PliqAndMelt");
+        if(iLayer==1){ CatchMeltAndPliq <- RESULTS$Outputs[,IndPliqAndMelt]/NLayers; }
+        if(iLayer >1){ CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[,IndPliqAndMelt]/NLayers; }
+        if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); }
+        rm(RESULTS); 
+      } ###ENDFOR_iLayer
+      names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep="");
+    } ###ENDIF_RunSnowModule
+    if(RunOptions$RunSnowModule==FALSE){
+      CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- NULL;
+      CatchMeltAndPliq  <- InputsModel$Precip[IndPeriod1]; }
+
+
+
+    ##MODEL______________________________________________________________________________________##
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputsMod <- as.integer(1:length(FortranOutputsMod)); 
+      } else { IndOutputsMod <- which(FortranOutputsMod %in% RunOptions$Outputs_Sim);  }
+
+    ##Use_of_IniResLevels
+      if("IniResLevels" %in% RunOptions){
+        RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*ParamMod[3];  ### routing store level (mm)
+        RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*ParamMod[1];  ### production store level (mm)
+      }
+
+    ##Call_fortan
+      RESULTS <- .Fortran("frun_gr4j",PACKAGE="airgr",
+                 ##inputs
+                     LInputs=LInputSeries,                         ### length of input and output series
+                     InputsPrecip=CatchMeltAndPliq,                ### input series of total precipitation [mm/d]
+                     InputsPE=InputsModel$PotEvap[IndPeriod1],     ### input series potential evapotranspiration [mm/d]
+                     NParam=NParamMod,                             ### number of model parameter
+                     Param=ParamMod,                               ### parameter set
+                     NStates=NStatesMod,                           ### number of state variables used for model initialising
+                     StateStart=RunOptions$IniStates[1:NStatesMod], ### state variables used when the model run starts
+                     NOutputs=as.integer(length(IndOutputsMod)),   ### number of output series
+                     IndOutputs=IndOutputsMod,                     ### indices of output series
+                 ##outputs                                        
+                     Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsMod)),  ### output series [mm]
+                     StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates))                     ### state variables at the end of the model run
+                     )
+      RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+      RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+      if(RunOptions$RunSnowModule & "Precip" %in% RunOptions$Outputs_Sim){ RESULTS$Outputs[,which(FortranOutputsMod[IndOutputsMod]=="Precip")] <- InputsModel$Precip[IndPeriod1]; }
+
+    ##Output_data_preparation
+      ##OutputsModel_only
+      if(ExportDatesR==FALSE & ExportStateEnd==FALSE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers) );
+        names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); }
+      ##DatesR_and_OutputsModel_only
+      if(ExportDatesR==TRUE & ExportStateEnd==FALSE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers) );
+        names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers);      }
+      ##OutputsModel_and_SateEnd_only
+      if(ExportDatesR==FALSE & ExportStateEnd==TRUE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers),
+                           list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) );
+        names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd");      }
+      ##DatesR_and_OutputsModel_and_SateEnd
+      if(ExportDatesR==TRUE & ExportStateEnd==TRUE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers),
+                           list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) );
+        names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd");      }
+
+    ##End
+      rm(RESULTS); 
+      class(OutputsModel) <- c("OutputsModel","daily","GR","CemaNeige");
+      return(OutputsModel);
+
+}
+
diff --git a/R/RunModel_CemaNeigeGR5J.R b/R/RunModel_CemaNeigeGR5J.R
new file mode 100644
index 00000000..e65f5dc0
--- /dev/null
+++ b/R/RunModel_CemaNeigeGR5J.R
@@ -0,0 +1,210 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run for RunModel_CemaNeigeGR5J.
+#'
+#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+#*****************************************************************************************************************
+#' @title Run with the CemaNeigeGR5J hydrological model
+#' @author Laurent Coron (December 2013)
+#' @references
+#'   Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances 
+#'       et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr
+#'   Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), 
+#'       A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, 
+#'       Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? 
+#'       Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? 
+#'       Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+#' @seealso \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR5J}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @example tests/example_RunModel_CemaNeigeGR5J.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of 7 parameters                                                             
+#'                             \tabular{ll}{                                                                      
+#'                             GR5J X1      \tab production store capacity [mm]                                \cr
+#'                             GR5J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+#'                             GR5J X3      \tab routing store capacity [mm]                                   \cr
+#'                             GR5J X4      \tab unit hydrograph time constant [d]                             \cr
+#'                             GR5J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+#'                             CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+#'                             CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+#'                             }                                                                                  
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:                                         
+#'          \tabular{ll}{                                                                                         
+#'          \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+#'          \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+#'          \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+#'          \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+#'          \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+#'          \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+#'          \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+#'          \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+#'          \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+#'          \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+#'          \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+#'          \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+#'          \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+#'          \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+#'          \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+#'          \emph{$CemaNeigeLayers}   \tab [list] list of CemaNeige outputs (1 list per layer)                          \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                          \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                           \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                                 \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]                 \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                                   \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm/d]                     \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm/d]                        \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm/d]       \cr
+#'          \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr
+#'          }                                                                                                     
+#'          (refer to the provided references or to the package source code for further details on these model outputs)
+#*****************************************************************************************************************'
+RunModel_CemaNeigeGR5J <- function(InputsModel,RunOptions,Param){
+
+    NParam <- 7;
+    FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt");
+    FortranOutputsMod       <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim");
+
+    ##Arguments_check
+      if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+      if(inherits(InputsModel,"daily"      )==FALSE){ stop("InputsModel must be of class 'daily'       \n"); return(NULL); }  
+      if(inherits(InputsModel,"GR"         )==FALSE){ stop("InputsModel must be of class 'GR'          \n"); return(NULL); }  
+      if(inherits(InputsModel,"CemaNeige"  )==FALSE){ stop("InputsModel must be of class 'CemaNeige'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"RunOptions"  )==FALSE){ stop("RunOptions must be of class 'RunOptions'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"GR"          )==FALSE){ stop("RunOptions must be of class 'GR'           \n"); return(NULL); }  
+      if(inherits(RunOptions,"CemaNeige"   )==FALSE){ stop("RunOptions must be of class 'CemaNeige'    \n"); return(NULL); }  
+      if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); }
+      if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); }
+      Param <- as.double(Param);
+
+    ##Input_data_preparation
+      if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; }
+      IndPeriod1     <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run);
+      LInputSeries   <- as.integer(length(IndPeriod1))
+      IndPeriod2     <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries;
+      ParamCemaNeige <- Param[(length(Param)-1):length(Param)];
+      NParamMod      <- as.integer(length(Param)-2);
+      ParamMod       <- Param[1:NParamMod];
+      NLayers        <- length(InputsModel$LayerPrecip);
+      NStatesMod     <- as.integer(length(RunOptions$IniStates)-2*NLayers);
+      ExportDatesR   <- "DatesR"   %in% RunOptions$Outputs_Sim;
+      ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim;
+
+
+    ##SNOW_MODULE________________________________________________________________________________##
+    if(RunOptions$RunSnowModule==TRUE){
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); 
+      } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim);  }
+      CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers";
+
+    ##Call_DLL_CemaNeige_________________________
+      for(iLayer in 1:NLayers){
+        StateStartCemaNeige <- RunOptions$IniStates[ (NStatesMod+2*(iLayer-1)+1):(NStatesMod+2*(iLayer-1)+2) ];
+        RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr",
+                        ##inputs
+                            LInputs=LInputSeries,                                                          ### length of input and output series
+                            InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1],                    ### input series of total precipitation [mm/d]
+                            InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1],  ### input series of fraction of solid precipitation [0-1]
+                            InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1],                        ### input series of air mean temperature [degC]
+                            MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer],                        ### value of annual mean solid precip [mm/y]
+                            NParam=as.integer(2),                                                          ### number of model parameter = 2
+                            Param=ParamCemaNeige,                                                          ### parameter set
+                            NStates=as.integer(2),                                                         ### number of state variables used for model initialising = 2
+                            StateStart=StateStartCemaNeige,                                                ### state variables used when the model run starts
+                            NOutputs=as.integer(length(IndOutputsCemaNeige)),                              ### number of output series
+                            IndOutputs=IndOutputsCemaNeige,                                                ### indices of output series
+                        ##outputs                                                               
+                            Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsCemaNeige)),  ### output series [mm]
+                            StateEnd=rep(as.double(-999.999),as.integer(2))                                          ### state variables at the end of the model run (reservoir levels [mm] and HU)
+                         )
+        RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+        RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+
+        ##Data_storage
+        CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]);
+        names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige];
+        IndPliqAndMelt <- which(names(CemaNeigeLayers[[iLayer]]) == "PliqAndMelt");
+        if(iLayer==1){ CatchMeltAndPliq <- RESULTS$Outputs[,IndPliqAndMelt]/NLayers; }
+        if(iLayer >1){ CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[,IndPliqAndMelt]/NLayers; }
+        if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); }
+        rm(RESULTS); 
+      } ###ENDFOR_iLayer
+      names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep="");
+    } ###ENDIF_RunSnowModule
+    if(RunOptions$RunSnowModule==FALSE){
+      CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- NULL;
+      CatchMeltAndPliq  <- InputsModel$Precip[IndPeriod1]; }
+
+
+
+    ##MODEL______________________________________________________________________________________##
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputsMod <- as.integer(1:length(FortranOutputsMod)); 
+      } else { IndOutputsMod <- which(FortranOutputsMod %in% RunOptions$Outputs_Sim);  }
+
+    ##Use_of_IniResLevels
+      if("IniResLevels" %in% RunOptions){
+        RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*ParamMod[3];  ### routing store level (mm)
+        RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*ParamMod[1];  ### production store level (mm)
+      }
+
+    ##Call_fortan
+      RESULTS <- .Fortran("frun_gr5j",PACKAGE="airgr",
+                 ##inputs
+                     LInputs=LInputSeries,                         ### length of input and output series
+                     InputsPrecip=CatchMeltAndPliq,                ### input series of total precipitation [mm/d]
+                     InputsPE=InputsModel$PotEvap[IndPeriod1],     ### input series potential evapotranspiration [mm/d]
+                     NParam=NParamMod,                             ### number of model parameter
+                     Param=ParamMod,                               ### parameter set
+                     NStates=NStatesMod,                           ### number of state variables used for model initialising
+                     StateStart=RunOptions$IniStates[1:NStatesMod], ### state variables used when the model run starts
+                     NOutputs=as.integer(length(IndOutputsMod)),   ### number of output series
+                     IndOutputs=IndOutputsMod,                     ### indices of output series
+                 ##outputs                                        
+                     Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsMod)),  ### output series [mm]
+                     StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates))                     ### state variables at the end of the model run
+                     )
+      RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+      RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+      if(RunOptions$RunSnowModule & "Precip" %in% RunOptions$Outputs_Sim){ RESULTS$Outputs[,which(FortranOutputsMod[IndOutputsMod]=="Precip")] <- InputsModel$Precip[IndPeriod1]; }
+
+    ##Output_data_preparation
+      ##OutputsModel_only
+      if(ExportDatesR==FALSE & ExportStateEnd==FALSE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers) );
+        names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); }
+      ##DatesR_and_OutputsModel_only
+      if(ExportDatesR==TRUE & ExportStateEnd==FALSE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers) );
+        names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers);      }
+      ##OutputsModel_and_SateEnd_only
+      if(ExportDatesR==FALSE & ExportStateEnd==TRUE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers),
+                           list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) );
+        names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd");      }
+      ##DatesR_and_OutputsModel_and_SateEnd
+      if(ExportDatesR==TRUE & ExportStateEnd==TRUE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers),
+                           list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) );
+        names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd");      }
+
+    ##End
+      rm(RESULTS); 
+      class(OutputsModel) <- c("OutputsModel","daily","GR","CemaNeige");
+      return(OutputsModel);
+
+}
+
diff --git a/R/RunModel_CemaNeigeGR6J.R b/R/RunModel_CemaNeigeGR6J.R
new file mode 100644
index 00000000..32604bd1
--- /dev/null
+++ b/R/RunModel_CemaNeigeGR6J.R
@@ -0,0 +1,211 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run for RunModel_CemaNeigeGR6J.
+#'
+#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+#*****************************************************************************************************************
+#' @title Run with the CemaNeigeGR6J hydrological model
+#' @author Laurent Coron (December 2013)
+#' @references
+#'   Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), 
+#'       A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, 
+#'       Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? 
+#'       Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+#'   Valéry, A., V. Andréassian and C. Perrin (2014), 
+#'       "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? 
+#'       Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+#' @seealso \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_GR6J}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of 8 parameters                                                             
+#'                             \tabular{ll}{                                                                      
+#'                             GR6J X1      \tab production store capacity [mm]                                \cr
+#'                             GR6J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+#'                             GR6J X3      \tab routing store capacity [mm]                                   \cr
+#'                             GR6J X4      \tab unit hydrograph time constant [d]                             \cr
+#'                             GR6J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+#'                             GR6J X6      \tab coefficient for emptying exponential store [-]                \cr
+#'                             CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+#'                             CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+#'                             }                                                                                  
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:                                         
+#'          \tabular{ll}{                                                                                         
+#'          \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+#'          \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+#'          \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+#'          \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+#'          \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+#'          \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+#'          \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+#'          \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+#'          \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+#'          \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+#'          \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+#'          \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+#'          \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+#'          \emph{$QR1     }          \tab [numeric] series of exponential store outflow (QR1) [mm/d]                    \cr
+#'          \emph{$Exp     }          \tab [numeric] series of exponential store level (X(6)) (negative) [mm]            \cr
+#'          \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+#'          \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+#'          \emph{$CemaNeigeLayers}   \tab [list] list of CemaNeige outputs (1 list per layer)                          \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                          \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                           \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                                 \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]                 \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                                   \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm/d]                     \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm/d]                        \cr
+#'          \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm/d]       \cr
+#'          \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr
+#'          }                                                                                                     
+#'          (refer to the provided references or to the package source code for further details on these model outputs)
+#*****************************************************************************************************************
+RunModel_CemaNeigeGR6J <- function(InputsModel,RunOptions,Param){
+
+    NParam <- 8;
+    FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt");
+    FortranOutputsMod       <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QR1","Exp","QD","Qsim");
+
+    ##Arguments_check
+      if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+      if(inherits(InputsModel,"daily"      )==FALSE){ stop("InputsModel must be of class 'daily'       \n"); return(NULL); }  
+      if(inherits(InputsModel,"GR"         )==FALSE){ stop("InputsModel must be of class 'GR'          \n"); return(NULL); }  
+      if(inherits(InputsModel,"CemaNeige"  )==FALSE){ stop("InputsModel must be of class 'CemaNeige'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"RunOptions"  )==FALSE){ stop("RunOptions must be of class 'RunOptions'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"GR"          )==FALSE){ stop("RunOptions must be of class 'GR'           \n"); return(NULL); }  
+      if(inherits(RunOptions,"CemaNeige"   )==FALSE){ stop("RunOptions must be of class 'CemaNeige'    \n"); return(NULL); }  
+      if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); }
+      if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); }
+      Param <- as.double(Param);
+
+    ##Input_data_preparation
+      if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; }
+      IndPeriod1     <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run);
+      LInputSeries   <- as.integer(length(IndPeriod1))
+      IndPeriod2     <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries;
+      ParamCemaNeige <- Param[(length(Param)-1):length(Param)];
+      NParamMod      <- as.integer(length(Param)-2);
+      ParamMod       <- Param[1:NParamMod];
+      NLayers        <- length(InputsModel$LayerPrecip);
+      NStatesMod     <- as.integer(length(RunOptions$IniStates)-2*NLayers);
+      ExportDatesR   <- "DatesR"   %in% RunOptions$Outputs_Sim;
+      ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim;
+
+
+
+    ##SNOW_MODULE________________________________________________________________________________##
+    if(RunOptions$RunSnowModule==TRUE){
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); 
+      } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim);  }
+      CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers";
+
+    ##Call_DLL_CemaNeige_________________________
+      for(iLayer in 1:NLayers){
+        StateStartCemaNeige <- RunOptions$IniStates[ (NStatesMod+2*(iLayer-1)+1):(NStatesMod+2*(iLayer-1)+2) ];
+        RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr",
+                        ##inputs
+                            LInputs=LInputSeries,                                                          ### length of input and output series
+                            InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1],                    ### input series of total precipitation [mm/d]
+                            InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1],  ### input series of fraction of solid precipitation [0-1]
+                            InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1],                        ### input series of air mean temperature [degC]
+                            MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer],                        ### value of annual mean solid precip [mm/y]
+                            NParam=as.integer(2),                                                          ### number of model parameter = 2
+                            Param=ParamCemaNeige,                                                          ### parameter set
+                            NStates=as.integer(2),                                                         ### number of state variables used for model initialising = 2
+                            StateStart=StateStartCemaNeige,                                                ### state variables used when the model run starts
+                            NOutputs=as.integer(length(IndOutputsCemaNeige)),                              ### number of output series
+                            IndOutputs=IndOutputsCemaNeige,                                                ### indices of output series
+                        ##outputs                                                               
+                            Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsCemaNeige)),  ### output series [mm]
+                            StateEnd=rep(as.double(-999.999),as.integer(2))                                          ### state variables at the end of the model run (reservoir levels [mm] and HU)
+                         )
+        RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+        RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+
+        ##Data_storage
+        CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]);
+        names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige];
+        IndPliqAndMelt <- which(names(CemaNeigeLayers[[iLayer]]) == "PliqAndMelt");
+        if(iLayer==1){ CatchMeltAndPliq <- RESULTS$Outputs[,IndPliqAndMelt]/NLayers; }
+        if(iLayer >1){ CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[,IndPliqAndMelt]/NLayers; }
+        if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); }
+        rm(RESULTS); 
+      } ###ENDFOR_iLayer
+      names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep="");
+    } ###ENDIF_RunSnowModule
+    if(RunOptions$RunSnowModule==FALSE){
+      CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- NULL;
+      CatchMeltAndPliq  <- InputsModel$Precip[IndPeriod1]; }
+
+
+
+    ##MODEL______________________________________________________________________________________##
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputsMod <- as.integer(1:length(FortranOutputsMod)); 
+      } else { IndOutputsMod <- which(FortranOutputsMod %in% RunOptions$Outputs_Sim);  }
+
+    ##Use_of_IniResLevels
+      if("IniResLevels" %in% RunOptions){
+        RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*ParamMod[3];  ### routing store level (mm)
+        RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*ParamMod[1];  ### production store level (mm)
+      }
+
+    ##Call_fortan
+      RESULTS <- .Fortran("frun_gr6j",PACKAGE="airgr",
+                 ##inputs
+                     LInputs=LInputSeries,                         ### length of input and output series
+                     InputsPrecip=CatchMeltAndPliq,                ### input series of total precipitation [mm/d]
+                     InputsPE=InputsModel$PotEvap[IndPeriod1],     ### input series potential evapotranspiration [mm/d]
+                     NParam=NParamMod,                             ### number of model parameter
+                     Param=ParamMod,                               ### parameter set
+                     NStates=NStatesMod,                           ### number of state variables used for model initialising
+                     StateStart=RunOptions$IniStates[1:NStatesMod], ### state variables used when the model run starts
+                     NOutputs=as.integer(length(IndOutputsMod)),   ### number of output series
+                     IndOutputs=IndOutputsMod,                     ### indices of output series
+                 ##outputs                                        
+                     Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsMod)),  ### output series [mm]
+                     StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates))                     ### state variables at the end of the model run
+                     )
+      RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+      RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+      if(RunOptions$RunSnowModule & "Precip" %in% RunOptions$Outputs_Sim){ RESULTS$Outputs[,which(FortranOutputsMod[IndOutputsMod]=="Precip")] <- InputsModel$Precip[IndPeriod1]; }
+
+    ##Output_data_preparation
+      ##OutputsModel_only
+      if(ExportDatesR==FALSE & ExportStateEnd==FALSE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers) );
+        names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); }
+      ##DatesR_and_OutputsModel_only
+      if(ExportDatesR==TRUE & ExportStateEnd==FALSE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers) );
+        names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers);      }
+      ##OutputsModel_and_SateEnd_only
+      if(ExportDatesR==FALSE & ExportStateEnd==TRUE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers),
+                           list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) );
+        names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd");      }
+      ##DatesR_and_OutputsModel_and_SateEnd
+      if(ExportDatesR==TRUE & ExportStateEnd==TRUE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(CemaNeigeLayers),
+                           list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) );
+        names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd");      }
+
+    ##End
+      rm(RESULTS); 
+      class(OutputsModel) <- c("OutputsModel","daily","GR","CemaNeige");
+      return(OutputsModel);
+
+}
+
diff --git a/R/RunModel_GR4J.R b/R/RunModel_GR4J.R
new file mode 100644
index 00000000..b4325023
--- /dev/null
+++ b/R/RunModel_GR4J.R
@@ -0,0 +1,128 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run for GR4J.
+#'
+#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+#*****************************************************************************************************************
+#' @title Run with the GR4J hydrological model
+#' @author Laurent Coron (December 2013)
+#' @references
+#'   Perrin, C., C. Michel and V. Andréassian (2003), 
+#'       Improvement of a parsimonious model for streamflow simulation, 
+#'       Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7.
+#' @seealso \code{\link{RunModel_GR5J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR4J}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @example tests/example_RunModel_GR4J.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of 4 parameters                                                             
+#'                             \tabular{ll}{                                                                      
+#'                             GR4J X1      \tab production store capacity [mm]                                \cr
+#'                             GR4J X2      \tab intercatchment exchange coefficient [mm/d]                    \cr
+#'                             GR4J X3      \tab routing store capacity [mm]                                   \cr
+#'                             GR4J X4      \tab unit hydrograph time constant [d]                             \cr
+#'                             }                                                                                  
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:                                         
+#'          \tabular{ll}{                                                                                         
+#'          \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+#'          \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+#'          \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+#'          \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+#'          \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+#'          \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+#'          \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+#'          \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+#'          \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+#'          \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+#'          \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+#'          \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+#'          \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+#'          \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+#'          \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+#'          \emph{$StateEnd}          \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr
+#'          }                                                                                                     
+#'          (refer to the provided references or to the package source code for further details on these model outputs)
+#*****************************************************************************************************************
+RunModel_GR4J <- function(InputsModel,RunOptions,Param){
+
+    NParam <- 4;
+    FortranOutputs <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim");
+
+    ##Arguments_check
+      if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+      if(inherits(InputsModel,"daily"      )==FALSE){ stop("InputsModel must be of class 'daily'       \n"); return(NULL); }  
+      if(inherits(InputsModel,"GR"         )==FALSE){ stop("InputsModel must be of class 'GR'          \n"); return(NULL); }  
+      if(inherits(RunOptions,"RunOptions"  )==FALSE){ stop("RunOptions must be of class 'RunOptions'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"GR"          )==FALSE){ stop("RunOptions must be of class 'GR'           \n"); return(NULL); }  
+      if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); }
+      if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); }
+      Param <- as.double(Param);
+
+    ##Input_data_preparation
+      if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; }
+      IndPeriod1   <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run);
+      LInputSeries <- as.integer(length(IndPeriod1))
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputs <- as.integer(1:length(FortranOutputs)); 
+      } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim);  }
+
+    ##Use_of_IniResLevels
+      if("IniResLevels" %in% RunOptions){
+        RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*Param[3];  ### routing store level (mm)
+        RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*Param[1];  ### production store level (mm)
+      }
+
+    ##Call_fortan
+      RESULTS <- .Fortran("frun_gr4j",PACKAGE="airgr",
+                 ##inputs
+                     LInputs=LInputSeries,                             ### length of input and output series
+                     InputsPrecip=InputsModel$Precip[IndPeriod1],      ### input series of total precipitation [mm/d]
+                     InputsPE=InputsModel$PotEvap[IndPeriod1],         ### input series potential evapotranspiration [mm/d]
+                     NParam=as.integer(length(Param)),                 ### number of model parameter
+                     Param=Param,                                      ### parameter set
+                     NStates=as.integer(length(RunOptions$IniStates)), ### number of state variables used for model initialising
+                     StateStart=RunOptions$IniStates,                  ### state variables used when the model run starts
+                     NOutputs=as.integer(length(IndOutputs)),          ### number of output series
+                     IndOutputs=IndOutputs,                            ### indices of output series
+                 ##outputs
+                     Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputs)),  ### output series [mm]
+                     StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates))                  ### state variables at the end of the model run
+                     )
+      RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+      RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+
+    ##Output_data_preparation
+      IndPeriod2     <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries;
+      ExportDatesR   <- "DatesR"   %in% RunOptions$Outputs_Sim;
+      ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim;
+      ##OutputsModel_only
+      if(ExportDatesR==FALSE & ExportStateEnd==FALSE){
+        OutputsModel <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]);
+        names(OutputsModel) <- FortranOutputs[IndOutputs];      }
+      ##DatesR_and_OutputsModel_only
+      if(ExportDatesR==TRUE & ExportStateEnd==FALSE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]) );
+        names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs]);      }
+      ##OutputsModel_and_SateEnd_only
+      if(ExportDatesR==FALSE & ExportStateEnd==TRUE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(RESULTS$StateEnd) );
+        names(OutputsModel) <- c(FortranOutputs[IndOutputs],"StateEnd");      }
+      ##DatesR_and_OutputsModel_and_SateEnd
+      if((ExportDatesR==TRUE & ExportStateEnd==TRUE) | "all" %in% RunOptions$Outputs_Sim){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(RESULTS$StateEnd) );
+        names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs],"StateEnd");      }
+
+    ##End
+      rm(RESULTS); 
+      class(OutputsModel) <- c("OutputsModel","daily","GR");
+      return(OutputsModel);
+
+}
+
diff --git a/R/RunModel_GR5J.R b/R/RunModel_GR5J.R
new file mode 100644
index 00000000..eb82813b
--- /dev/null
+++ b/R/RunModel_GR5J.R
@@ -0,0 +1,131 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run for GR5J.
+#'
+#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+#*****************************************************************************************************************
+#' @title Run with the GR5J hydrological model
+#' @author Laurent Coron (December 2013)
+#' @references
+#'   Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances
+#'       et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr
+#'   Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet, and V. Andréassian (2011), 
+#'       A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, 
+#'       Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+#' @seealso \code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR5J}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @example tests/example_RunModel_GR5J.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of 5 parameters                                                             
+#'                             \tabular{ll}{                                                                      
+#'                             GR5J X1      \tab production store capacity [mm]                                \cr
+#'                             GR5J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+#'                             GR5J X3      \tab routing store capacity [mm]                                   \cr
+#'                             GR5J X4      \tab unit hydrograph time constant [d]                             \cr
+#'                             GR5J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+#'                             }                                                                                  
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:                                         
+#'          \tabular{ll}{                                                                                         
+#'          \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+#'          \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+#'          \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+#'          \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+#'          \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+#'          \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+#'          \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+#'          \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+#'          \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+#'          \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+#'          \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+#'          \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+#'          \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+#'          \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+#'          \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+#'          \emph{$StateEnd}          \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr
+#'          }                                                                                                     
+#'          (refer to the provided references or to the package source code for further details on these model outputs)
+#*****************************************************************************************************************'
+RunModel_GR5J <- function(InputsModel,RunOptions,Param){
+
+    NParam <- 5;
+    FortranOutputs <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim");
+
+    ##Arguments_check
+      if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+      if(inherits(InputsModel,"daily"      )==FALSE){ stop("InputsModel must be of class 'daily'       \n"); return(NULL); }  
+      if(inherits(InputsModel,"GR"         )==FALSE){ stop("InputsModel must be of class 'GR'          \n"); return(NULL); }  
+      if(inherits(RunOptions,"RunOptions"  )==FALSE){ stop("RunOptions must be of class 'RunOptions'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"GR"          )==FALSE){ stop("RunOptions must be of class 'GR'           \n"); return(NULL); }  
+      if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); }
+      if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); }
+      Param <- as.double(Param);
+
+    ##Input_data_preparation
+      if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; }
+      IndPeriod1   <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run);
+      LInputSeries <- as.integer(length(IndPeriod1))
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputs <- as.integer(1:length(FortranOutputs)); 
+      } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim);  }
+
+    ##Use_of_IniResLevels
+      if("IniResLevels" %in% RunOptions){
+        RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*Param[3];  ### routing store level (mm)
+        RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*Param[1];  ### production store level (mm)
+      }
+
+    ##Call_fortan
+      RESULTS <- .Fortran("frun_gr5j",PACKAGE="airgr",
+                 ##inputs
+                     LInputs=LInputSeries,                             ### length of input and output series
+                     InputsPrecip=InputsModel$Precip[IndPeriod1],      ### input series of total precipitation [mm/d]
+                     InputsPE=InputsModel$PotEvap[IndPeriod1],         ### input series potential evapotranspiration [mm/d]
+                     NParam=as.integer(length(Param)),                 ### number of model parameter
+                     Param=Param,                                      ### parameter set
+                     NStates=as.integer(length(RunOptions$IniStates)), ### number of state variables used for model initialising
+                     StateStart=RunOptions$IniStates,                  ### state variables used when the model run starts
+                     NOutputs=as.integer(length(IndOutputs)),          ### number of output series
+                     IndOutputs=IndOutputs,                            ### indices of output series
+                 ##outputs
+                     Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputs)),  ### output series [mm]
+                     StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates))                  ### state variables at the end of the model run
+                     )
+      RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+      RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+
+    ##Output_data_preparation
+      IndPeriod2     <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries;
+      ExportDatesR   <- "DatesR"   %in% RunOptions$Outputs_Sim;
+      ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim;
+      ##OutputsModel_only
+      if(ExportDatesR==FALSE & ExportStateEnd==FALSE){
+        OutputsModel <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]);
+        names(OutputsModel) <- FortranOutputs[IndOutputs];      }
+      ##DatesR_and_OutputsModel_only
+      if(ExportDatesR==TRUE & ExportStateEnd==FALSE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]) );
+        names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs]);      }
+      ##OutputsModel_and_SateEnd_only
+      if(ExportDatesR==FALSE & ExportStateEnd==TRUE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(RESULTS$StateEnd) );
+        names(OutputsModel) <- c(FortranOutputs[IndOutputs],"StateEnd");      }
+      ##DatesR_and_OutputsModel_and_SateEnd
+      if((ExportDatesR==TRUE & ExportStateEnd==TRUE) | "all" %in% RunOptions$Outputs_Sim){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(RESULTS$StateEnd) );
+        names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs],"StateEnd");      }
+
+    ##End
+      rm(RESULTS); 
+      class(OutputsModel) <- c("OutputsModel","daily","GR");
+      return(OutputsModel);
+
+}
+
diff --git a/R/RunModel_GR6J.R b/R/RunModel_GR6J.R
new file mode 100644
index 00000000..7a022c8b
--- /dev/null
+++ b/R/RunModel_GR6J.R
@@ -0,0 +1,132 @@
+#*****************************************************************************************************************
+#' Function which performs a single model run for GR6J.
+#'
+#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+#*****************************************************************************************************************
+#' @title Run with the GR6J hydrological model
+#' @author Laurent Coron (December 2013)
+#' @references
+#'   Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), 
+#'       A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, 
+#'       Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+#' @seealso \code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR5J}}, \code{\link{RunModel_CemaNeigeGR6J}},
+#'          \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+#' @example tests/example_RunModel_GR6J.R
+#' @useDynLib airgr
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  InputsModel         [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details
+#' @param  RunOptions          [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details
+#' @param  Param               [numeric] vector of 6 parameters                                                             
+#'                             \tabular{ll}{                                                                      
+#'                             GR6J X1      \tab production store capacity [mm]                                \cr
+#'                             GR6J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+#'                             GR6J X3      \tab routing store capacity [mm]                                   \cr
+#'                             GR6J X4      \tab unit hydrograph time constant [d]                             \cr
+#'                             GR6J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+#'                             GR6J X6      \tab coefficient for emptying exponential store [-]                \cr
+#'                             }                                                                                  
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  [list] list containing the function outputs organised as follows:                                         
+#'          \tabular{ll}{                                                                                         
+#'          \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+#'          \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+#'          \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+#'          \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+#'          \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+#'          \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+#'          \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+#'          \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+#'          \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+#'          \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+#'          \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+#'          \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+#'          \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+#'          \emph{$QR1     }          \tab [numeric] series of exponential store outflow (QR1) [mm/d]                    \cr
+#'          \emph{$Exp     }          \tab [numeric] series of exponential store level (X(6)) (negative) [mm]            \cr
+#'          \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+#'          \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+#'          \emph{$StateEnd}          \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr
+#'          }                                                                                                     
+#'          (refer to the provided references or to the package source code for further details on these model outputs)
+#*****************************************************************************************************************
+RunModel_GR6J <- function(InputsModel,RunOptions,Param){
+
+    NParam <- 6;
+    FortranOutputs <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QR1","Exp","QD","Qsim");
+
+    ##Arguments_check
+      if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); }  
+      if(inherits(InputsModel,"daily"      )==FALSE){ stop("InputsModel must be of class 'daily'       \n"); return(NULL); }  
+      if(inherits(InputsModel,"GR"         )==FALSE){ stop("InputsModel must be of class 'GR'          \n"); return(NULL); }  
+      if(inherits(RunOptions,"RunOptions"  )==FALSE){ stop("RunOptions must be of class 'RunOptions'   \n"); return(NULL); }  
+      if(inherits(RunOptions,"GR"          )==FALSE){ stop("RunOptions must be of class 'GR'           \n"); return(NULL); }  
+      if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); }
+      if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); }
+      Param <- as.double(Param);
+
+    ##Input_data_preparation
+      if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; }
+      IndPeriod1   <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run);
+      LInputSeries <- as.integer(length(IndPeriod1))
+      if("all" %in% RunOptions$Outputs_Sim){ IndOutputs <- as.integer(1:length(FortranOutputs)); 
+      } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim);  }
+
+    ##Use_of_IniResLevels
+      if("IniResLevels" %in% RunOptions){
+        RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*Param[3];  ### routing store level (mm)
+        RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*Param[1];  ### production store level (mm)
+      }
+
+    ##Call_fortan
+      RESULTS <- .Fortran("frun_gr6j",PACKAGE="airgr",
+                 ##inputs
+                     LInputs=LInputSeries,                             ### length of input and output series
+                     InputsPrecip=InputsModel$Precip[IndPeriod1],      ### input series of total precipitation [mm/d]
+                     InputsPE=InputsModel$PotEvap[IndPeriod1],         ### input series potential evapotranspiration [mm/d]
+                     NParam=as.integer(length(Param)),                 ### number of model parameter
+                     Param=Param,                                      ### parameter set
+                     NStates=as.integer(length(RunOptions$IniStates)), ### number of state variables used for model initialising
+                     StateStart=RunOptions$IniStates,                  ### state variables used when the model run starts
+                     NOutputs=as.integer(length(IndOutputs)),          ### number of output series
+                     IndOutputs=IndOutputs,                            ### indices of output series
+                 ##outputs
+                     Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputs)),  ### output series [mm]
+                     StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates))                  ### state variables at the end of the model run
+                     )
+      RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA;
+      RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA;
+
+    ##Output_data_preparation
+      IndPeriod2     <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries;
+      ExportDatesR   <- "DatesR"   %in% RunOptions$Outputs_Sim;
+      ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim;
+      ##OutputsModel_only
+      if(ExportDatesR==FALSE & ExportStateEnd==FALSE){
+        OutputsModel <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]);
+        names(OutputsModel) <- FortranOutputs[IndOutputs];      }
+      ##DatesR_and_OutputsModel_only
+      if(ExportDatesR==TRUE & ExportStateEnd==FALSE){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]) );
+        names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs]);      }
+      ##OutputsModel_and_SateEnd_only
+      if(ExportDatesR==FALSE & ExportStateEnd==TRUE){
+        OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(RESULTS$StateEnd) );
+        names(OutputsModel) <- c(FortranOutputs[IndOutputs],"StateEnd");      }
+      ##DatesR_and_OutputsModel_and_SateEnd
+      if((ExportDatesR==TRUE & ExportStateEnd==TRUE) | "all" %in% RunOptions$Outputs_Sim){
+        OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]),
+                           lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]),
+                           list(RESULTS$StateEnd) );
+        names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs],"StateEnd");      }
+
+    ##End
+      rm(RESULTS); 
+      class(OutputsModel) <- c("OutputsModel","daily","GR");
+      return(OutputsModel);
+
+}
+  
diff --git a/R/TransfoParam.R b/R/TransfoParam.R
new file mode 100644
index 00000000..ae0da09c
--- /dev/null
+++ b/R/TransfoParam.R
@@ -0,0 +1,19 @@
+#**************************************************************************************************
+#' Function which transforms model parameters (from real to transformed parameters and vice versa) using the provided function.
+#**************************************************************************************************
+#' @title   Transformation of the parameters using the provided function
+#' @author  Laurent Coron (June 2014)
+#' @seealso \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}}
+#' @example tests/example_TransfoParam.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputsOutputs____________________________________________________________________________
+#' @param   ParamIn      [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#' @param   Direction    [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real
+#' @param   FUN_TRANSFO  [function] model parameters transformation function (e.g. TransfoParam_GR4J, TransfoParam_CemaNeigeGR4J)
+#' @return  \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#**************************************************************************************************'
+TransfoParam <- function(ParamIn,Direction,FUN_TRANSFO){
+    return( FUN_TRANSFO(ParamIn,Direction) )
+}
+
diff --git a/R/TransfoParam_CemaNeige.R b/R/TransfoParam_CemaNeige.R
new file mode 100644
index 00000000..73ba2134
--- /dev/null
+++ b/R/TransfoParam_CemaNeige.R
@@ -0,0 +1,37 @@
+#**************************************************************************************************
+#' Function which transforms model parameters (from real to transformed parameters and vice versa).
+#**************************************************************************************************
+#' @title   Transformation of the parameters from the CemaNeige module
+#' @author  Laurent Coron (December 2013)
+#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}
+#' @example tests/example_TransfoParam_CemaNeige.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputsOutputs____________________________________________________________________________
+#' @param   ParamIn   [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#' @param   Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real
+#' @return  \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#**************************************************************************************************
+TransfoParam_CemaNeige <- function(ParamIn,Direction){
+
+  NParam <- 2;
+  Bool <- is.matrix(ParamIn);
+  if(Bool==FALSE){ ParamIn <- rbind(ParamIn); }
+  if(ncol(ParamIn)!=NParam){ stop(paste("the CemaNeige module requires ",NParam," parameters \n",sep="")); return(NULL); }  
+
+  if(Direction=="TR"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- (ParamIn[,1]+9.99)/19.98;            ### CemaNeige X1 (weighting coefficient for snow pack thermal state) 
+    ParamOut[,2] <- exp(ParamIn[,2]);                    ### CemaNeige X2 (degree-day melt coefficient)     
+  }	
+  if(Direction=="RT"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- ParamIn[,1]*19.98-9.99;              ### CemaNeige X1 (weighting coefficient for snow pack thermal state) 
+    ParamOut[,2] <- log(ParamIn[,2]);                    ### CemaNeige X2 (degree-day melt coefficient)                      
+  }	
+
+  if(Bool==FALSE){ ParamOut <- ParamOut[1,]; }
+  return(ParamOut);
+
+}
+
diff --git a/R/TransfoParam_GR4J.R b/R/TransfoParam_GR4J.R
new file mode 100644
index 00000000..2613179d
--- /dev/null
+++ b/R/TransfoParam_GR4J.R
@@ -0,0 +1,41 @@
+#**************************************************************************************************
+#' Function which transforms model parameters (from real to transformed parameters and vice versa).
+#**************************************************************************************************
+#' @title   Transformation of the parameters from the GR4J model
+#' @author  Laurent Coron (December 2013)
+#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}}
+#' @example tests/example_TransfoParam_GR4J.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputsOutputs____________________________________________________________________________
+#' @param   ParamIn   [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#' @param   Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real
+#' @return  \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#**************************************************************************************************
+TransfoParam_GR4J <- function(ParamIn,Direction){
+
+  NParam <- 4;
+  Bool <- is.matrix(ParamIn);
+  if(Bool==FALSE){ ParamIn <- rbind(ParamIn); }
+  if(ncol(ParamIn)!=NParam){ stop(paste("the GR4J model requires ",NParam," parameters \n",sep="")); return(NULL); }  
+
+  if(Direction=="TR"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- exp(1.5*ParamIn[,1]);                ### GR4J X1 (production store capacity)    
+    ParamOut[,2] <- sinh(ParamIn[,2]);                   ### GR4J X2 (groundwater exchange coefficient)      
+    ParamOut[,3] <- exp(ParamIn[,3]);                    ### GR4J X3 (routing store capacity)       
+    ParamOut[,4] <- 20+19.5*(ParamIn[,4]-9.99)/19.98;    ### GR4J X4 (unit hydrograph time constant)
+  }	
+  if(Direction=="RT"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- log(ParamIn[,1])/1.5;                ### GR4J X1 (production store capacity)    
+    ParamOut[,2] <- asinh(ParamIn[,2]);                  ### GR4J X2 (groundwater exchange coefficient)      
+    ParamOut[,3] <- log(ParamIn[,3]);                    ### GR4J X3 (routing store capacity)       
+    ParamOut[,4] <- 9.99+19.98*(ParamIn[,4]-20)/19.5;    ### GR4J X4 (unit hydrograph time constant)
+  }	
+
+  if(Bool==FALSE){ ParamOut <- ParamOut[1,]; }
+  return(ParamOut);
+
+}
+
diff --git a/R/TransfoParam_GR5J.R b/R/TransfoParam_GR5J.R
new file mode 100644
index 00000000..126d25ba
--- /dev/null
+++ b/R/TransfoParam_GR5J.R
@@ -0,0 +1,45 @@
+#**************************************************************************************************
+#' Function which transforms model parameters (from real to transformed parameters and vice versa).
+#**************************************************************************************************
+#' @title   Transformation of the parameters from the GR5J model
+#' @author  Laurent Coron (December 2013)
+#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}}
+#' @example tests/example_TransfoParam_GR5J.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputsOutputs____________________________________________________________________________
+#' @param   ParamIn   [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#' @param   Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real
+#' @return  \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#**************************************************************************************************
+TransfoParam_GR5J <- function(ParamIn,Direction){
+
+  NParam <- 5;
+  Bool <- is.matrix(ParamIn);
+  if(Bool==FALSE){ ParamIn <- rbind(ParamIn); }
+  if(ncol(ParamIn)!=NParam){ stop(paste("the GR5J model requires ",NParam," parameters \n",sep="")); return(NULL); }  
+
+  if(Direction=="TR"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- exp(1.5*ParamIn[,1]);                ### GR5J X1 (production store capacity)
+    ParamOut[,2] <- sinh(ParamIn[,2]);                   ### GR5J X2 (groundwater exchange coefficient 1)
+    ParamOut[,3] <- exp(ParamIn[,3]);                    ### GR5J X3 (routing store capacity)
+    ParamOut[,4] <- 20+19.5*(ParamIn[,4]-9.99)/19.98;    ### GR5J X4 (unit hydrograph time constant)
+    ### ParamOut[,5] <- sinh(ParamIn[,5]);                   ### GR5J X5 (groundwater exchange coefficient 2)
+    ParamOut[,5] <- ParamIn[,5]/5;                       ### GR5J X5 (groundwater exchange coefficient 2)
+  }	
+  if(Direction=="RT"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- log(ParamIn[,1]) / 1.5;              ### GR5J X1 (production store capacity)
+    ParamOut[,2] <- asinh(ParamIn[,2]);                  ### GR5J X2 (groundwater exchange coefficient 1)
+    ParamOut[,3] <- log(ParamIn[,3]);                    ### GR5J X3 (routing store capacity)
+    ParamOut[,4] <- 9.99+19.98*(ParamIn[,4]-20)/19.5;    ### GR5J X4 (unit hydrograph time constant)
+    ### ParamOut[,5] <- asinh(ParamIn[,5]);                  ### GR5J X5 (groundwater exchange coefficient 2)
+    ParamOut[,5] <- ParamIn[,5]*5;                       ### GR5J X5 (groundwater exchange coefficient 2)
+  }	
+
+  if(Bool==FALSE){ ParamOut <- ParamOut[1,]; }
+  return(ParamOut);
+
+}
+
diff --git a/R/TransfoParam_GR6J.R b/R/TransfoParam_GR6J.R
new file mode 100644
index 00000000..9ae1ab65
--- /dev/null
+++ b/R/TransfoParam_GR6J.R
@@ -0,0 +1,47 @@
+#**************************************************************************************************
+#' Function which transforms model parameters (from real to transformed parameters and vice versa).
+#**************************************************************************************************
+#' @title   Transformation of the parameters from the GR6J model
+#' @author  Laurent Coron (December 2013)
+#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_CemaNeige}}
+#' @example tests/example_TransfoParam_GR6J.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputsOutputs____________________________________________________________________________
+#' @param   ParamIn   [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#' @param   Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real
+#' @return  \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+#**************************************************************************************************
+TransfoParam_GR6J <- function(ParamIn,Direction){
+
+  NParam <- 6;
+  Bool <- is.matrix(ParamIn);
+  if(Bool==FALSE){ ParamIn <- rbind(ParamIn); }
+  if(ncol(ParamIn)!=NParam){ stop(paste("the GR6J model requires ",NParam," parameters \n",sep="")); return(NULL); }  
+
+  if(Direction=="TR"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- exp(1.5*ParamIn[,1]);                ### GR6J X1 (production store capacity)
+    ParamOut[,2] <- sinh(ParamIn[,2]);                   ### GR6J X2 (groundwater exchange coefficient 1)
+    ParamOut[,3] <- exp(ParamIn[,3]);                    ### GR6J X3 (routing store capacity)
+    ParamOut[,4] <- 20+19.5*(ParamIn[,4]-9.99)/19.98;    ### GR6J X4 (unit hydrograph time constant)
+    ### ParamOut[,5] <- sinh(Xtran[,5]);                   ### GR6J X5 (groundwater exchange coefficient 2)
+    ParamOut[,5] <- ParamIn[,5]/5;                       ### GR6J X5 (groundwater exchange coefficient 2)
+    ParamOut[,6] <- exp(ParamIn[,6]);                    ### GR6J X6 (coefficient for emptying exponential store)
+  }	
+  if(Direction=="RT"){
+    ParamOut     <-  ParamIn;
+    ParamOut[,1] <- log(ParamIn[,1]) / 1.5;              ### GR6J X1 (production store capacity)
+    ParamOut[,2] <- asinh(ParamIn[,2]);                  ### GR6J X2 (groundwater exchange coefficient 1)
+    ParamOut[,3] <- log(ParamIn[,3]);                    ### GR6J X3 (routing store capacity)
+    ParamOut[,4] <- 9.99+19.98*(ParamIn[,4]-20)/19.5;    ### GR6J X4 (unit hydrograph time constant)
+    ### ParamOut[,5] <- asinh(ParamIn[,5]);                  ### GR6J X5 (groundwater exchange coefficient 2)
+    ParamOut[,5] <- ParamIn[,5]*5;                       ### GR6J X5 (groundwater exchange coefficient 2)
+    ParamOut[,6] <- log(ParamIn[,6]);                    ### GR6J X6 (coefficient for emptying exponential store)
+  }	
+
+  if(Bool==FALSE){ ParamOut <- ParamOut[1,]; }
+  return(ParamOut);
+
+}
+
diff --git a/R/airGR b/R/airGR
deleted file mode 100644
index 3b65e3cb..00000000
--- a/R/airGR
+++ /dev/null
@@ -1,27 +0,0 @@
-#  File share/R/nspackloader.R
-#  Part of the R package, http://www.R-project.org
-#
-#  Copyright (C) 1995-2012 The R Core Team
-#
-#  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 2 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.
-#
-#  A copy of the GNU General Public License is available at
-#  http://www.r-project.org/Licenses/
-
-local({
-    info <- loadingNamespaceInfo()
-    pkg <- info$pkgname
-    ns <- .getNamespace(as.name(pkg))
-    if (is.null(ns))
-        stop("cannot find namespace environment for ", pkg, domain = NA);
-    dbbase <- file.path(info$libname, pkg, "R", pkg)
-    lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.")
-})
diff --git a/R/airGR.rdb b/R/airGR.rdb
deleted file mode 100644
index 30a4c85c4ec815191a24516daecd131930e8b65d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 46952
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
ZdXx2_Yx9bLh)bVjKP~z~Tr&G2`(LJ7o%{d*

diff --git a/R/airGR.rdx b/R/airGR.rdx
deleted file mode 100644
index cde25a5c4ef6627a5f4cdee1bd62ad9250dd06b9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 645
zcmV;00($))iwFP!0000027Q!GYZE~j$7ho?Hc4apq6G`$!Gfp|v`v)OQyN2jA={Xg
zq9AOi$uwQu?5?w$R`F0R9z-l2ir^clU%;E-MXcYzyNF)BcoIDb>a&~OeP)~5z~q_V
z|G)dpGqW>uIY|hKkSMfB)aj1EU(}0-pru`(M6wW%3;b~#|Au%JIXVvU3vvu{X5Jx>
zY!MRwiahp`kp9=mhh@m|4f)7vLJ|?=6H|nwW{}U^B4qypa`h9$N642<Li+9^&;J1a
zfPD20)HsE_@E!O7GTQ^;EpqEU#D~bsP;Wektgpj-){s{v;M>S+cYyCB-%CL~>&P1$
zVcyIDKR|x`45HvaIY@}Kh5Yn01fl-tKOqS9y*LJ;jQr|4tluw~v$Mt$iID`vKApCi
z1)V{6GjzpFR#D_arBtsLiX}zKdh$My>ys5`FB?s3jxK5py@9Mr8`o%y$&k;}Qbnq%
zi=5i3p?lJxASvf&3bLmUiMnChYTGl0i=0uLx%RB-*jA9rb<XQ%$F_=GwS!cGUNM?X
z3%^k7=;1_TXQ@pKnyr>@*qoY%)>B=g#JRzRG17scTr8J7ac@YR=zUbK@9=1?5~%5F
zsYzAsrZU@Us{V@gL%rfGhJ99wtW9O6w*2KD?RCnv+=boT{I2dP-%SUukWdu!JBh*T
z19P0}){;@BociB&RMdK=G8A%!LAM+E{~5vHL#Affu%b3@2SWaMw_glThXl8zG>+{4
zRt0wYo5F2)rK>roN&4#@pqMvkoarmm(<ehT5u(Wu<+?SIq<b>m7Rnp-H{uHAs&nxC
fy_@80iE*YkP-z%#lQYX=O(*F;hSpvz{RIF3R8vcL

diff --git a/R/plot_OutputsModel.R b/R/plot_OutputsModel.R
new file mode 100644
index 00000000..1ef2b869
--- /dev/null
+++ b/R/plot_OutputsModel.R
@@ -0,0 +1,331 @@
+#*****************************************************************************************************************
+#' Function which creates a screen plot giving an overview of the model outputs
+#'
+#' Dashboard of results including various graphs (depending on the model):
+#' (1) time series of total precipitation and simulated flows (and observed flows if provided)
+#' (2) interannual median monthly simulated flow (and observed flows if provided)
+#' (3) correlation plot between simulated and observed flows (if observed flows provided)
+#' (4) cumulative frequency plot for simulated flows (and observed flows if provided)
+#*****************************************************************************************************************
+#' @title   Default preview of model outputs
+#' @author  Laurent Coron (June 2014)
+## @example tests/example_plot_OutputsModel.R
+#' @encoding UTF-8
+#' @export
+#_FunctionInputs__________________________________________________________________________________________________
+#' @param  OutputsModel      [object of class \emph{OutputsModel}] list of model outputs (which must at least include DatesR, Precip and Qsim) [POSIXlt, mm, mm]
+#' @param  Qobs              (optional) [numeric] time series of observed flow (for the same time-steps than simulated) [mm]
+#' @param  IndPeriod_Plot    (optional) [numeric] indices of the time-steps to be plotted (among the OutputsModel series)
+#' @param  BasinArea         (optional) [numeric] basin area [km2], used to plot flow axes in m3/s
+#' @param  quiet             (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
+#_FunctionOutputs_________________________________________________________________________________________________
+#' @return  screen plot window
+#*****************************************************************************************************************'
+plot_OutputsModel <- function(OutputsModel,Qobs=NULL,IndPeriod_Plot=NULL,BasinArea=NULL,quiet=FALSE){
+
+
+  if(!inherits(OutputsModel,"GR") & !inherits(OutputsModel,"CemaNeige")){ stop(paste("OutputsModel not in the correct format for default plotting \n",sep="")); return(NULL); }
+
+  BOOL_Dates <- FALSE; 
+      if("DatesR" %in% names(OutputsModel)){ BOOL_Dates <- TRUE; }
+  BOOL_Pobs <- FALSE; 
+      if("Precip" %in% names(OutputsModel)){ BOOL_Pobs <- TRUE; }
+  BOOL_Qsim <- FALSE; 
+      if("Qsim"   %in% names(OutputsModel)){ BOOL_Qsim <- TRUE; }
+  BOOL_Qobs <- FALSE;
+      if(BOOL_Qsim & length(Qobs)==length(OutputsModel$Qsim)){ if(sum(is.na(Qobs))!=length(Qobs)){ BOOL_Qobs <- TRUE; } }
+  BOOL_Snow <- FALSE;
+      if("CemaNeigeLayers" %in% names(OutputsModel)){ if("SnowPack" %in% names(OutputsModel$CemaNeigeLayers[[1]])){ BOOL_Snow <- TRUE; } }
+  BOOL_Psol <- FALSE;
+      if("CemaNeigeLayers" %in% names(OutputsModel)){ if("Psol"     %in% names(OutputsModel$CemaNeigeLayers[[1]])){ BOOL_Psol <- TRUE; } }
+
+  if(!BOOL_Dates){
+    stop(paste("OutputsModel must contain at least DatesR to allow plotting \n",sep="")); return(NULL); }
+  if(inherits(OutputsModel,"GR") & !BOOL_Qsim){
+    stop(paste("OutputsModel must contain at least Qsim to allow plotting \n",sep="")); return(NULL); }
+
+  if(BOOL_Dates){
+    MyRollMean1 <- function(x,n){
+      return(filter(x,rep(1/n,n),sides=2)); }
+    MyRollMean2 <- function(x,n){
+      return(filter(c(tail(x,n%/%2),x,x[1:(n%/%2)]),rep(1/n,n),sides=2)[(n%/%2+1):(length(x)+n%/%2)]); }
+    BOOL_TS  <- FALSE;
+    TimeStep <- difftime(tail(OutputsModel$DatesR,1),tail(OutputsModel$DatesR,2),units="secs")[[1]];
+    if(inherits(OutputsModel,"hourly" ) & TimeStep ==                     60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/h]";     }
+    if(inherits(OutputsModel,"daily"  ) & TimeStep ==                  24*60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/d]";     }
+    if(inherits(OutputsModel,"monthly") & TimeStep %in% c(28,29,30,31)*24*60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/month]"; }
+    if(inherits(OutputsModel,"yearly" ) & TimeStep %in%     c(365,366)*24*60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/y]";     }
+    if(!BOOL_TS){ stop(paste("the time step of the model inputs could not be found \n",sep="")); return(NULL); } 
+  }
+  if(length(IndPeriod_Plot)==0){ IndPeriod_Plot <- 1:length(OutputsModel$DatesR); }
+  if(inherits(OutputsModel,"CemaNeige")){ NLayers <- length(OutputsModel$CemaNeigeLayers); }
+  BOOL_QobsZero <- FALSE; if(BOOL_Qobs){ SelectQobsNotZero <- (round(Qobs[IndPeriod_Plot]             ,4)!=0); BOOL_QobsZero <- sum(!SelectQobsNotZero,na.rm=TRUE)>0; }
+  BOOL_QsimZero <- FALSE; if(BOOL_Qsim){ SelectQsimNotZero <- (round(OutputsModel$Qsim[IndPeriod_Plot],4)!=0); BOOL_QsimZero <- sum(!SelectQsimNotZero,na.rm=TRUE)>0; }
+  if(BOOL_QobsZero & !quiet){ warning("\t zeroes detected in Qobs -> some plots in the log space will not be created using all time-steps \n"); }
+  if(BOOL_QsimZero & !quiet){ warning("\t zeroes detected in Qsim -> some plots in the log space will not be created using all time-steps \n"); }
+  BOOL_FilterZero <- TRUE;
+
+  ##Options
+  BLOC <- TRUE; if(BLOC){
+    cexaxis <- 1.0; cexlab <- 0.9; cexleg=1.0; lwd=1.8; lineX=2.6; lineY=2.6; bgleg <- rgb(1,1,1,alpha=0.7); bgleg <- NA;
+
+    matlayout <- NULL; iPlot <- 0;
+    if(BOOL_Pobs){ 
+      matlayout <- rbind(matlayout,c(iPlot+1,iPlot+1,iPlot+1)); iPlot <- iPlot+1; }
+    if(BOOL_Snow){ 
+      matlayout <- rbind(matlayout,c(iPlot+1,iPlot+1,iPlot+1),c(iPlot+1,iPlot+1,iPlot+1)); iPlot <- iPlot+1; }
+    if(BOOL_Qsim | BOOL_Qobs){ 
+      matlayout <- rbind(matlayout,c(iPlot+1,iPlot+1,iPlot+1),c(iPlot+1,iPlot+1,iPlot+1)); iPlot <- iPlot+1; }
+    if(BOOL_TS & BOOL_Qsim){ 
+      matlayout <- rbind(matlayout,c(iPlot+1,iPlot+2,iPlot+3),c(iPlot+1,iPlot+2,iPlot+3)); iPlot <- iPlot+3; }
+    iPlotMax <- iPlot;
+
+    isRStudio <- Sys.getenv("RSTUDIO") == "1";
+    if(!isRStudio){ 
+      if(iPlotMax==1){ dev.new(width=10,height=02); }
+      if(iPlotMax==2){ dev.new(width=10,height=05); }
+      if(iPlotMax==3){ dev.new(width=10,height=05); }
+      if(iPlotMax==5){ dev.new(width=10,height=07); }
+      if(iPlotMax==6){ dev.new(width=10,height=10); }
+    }
+    layout(matlayout);
+
+    Xaxis <- 1:length(IndPeriod_Plot);
+    if(BOOL_Dates){
+      Seq1 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday==1 & OutputsModel$DatesR[IndPeriod_Plot]$mon %in% c(0,3,6,9));
+      Seq2 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday==1 & OutputsModel$DatesR[IndPeriod_Plot]$mon==0);
+    }
+
+    if(!is.null(BasinArea)){
+      Factor_MMH_M3S <- BasinArea/(             60*60/1000); 
+      Factor_MMD_M3S <- BasinArea/(          24*60*60/1000); 
+      Factor_MMM_M3S <- BasinArea/(365.25/12*24*60*60/1000); 
+      Factor_MMY_M3S <- BasinArea/(   365.25*24*60*60/1000); 
+      if(inherits(OutputsModel,"hourly" )){ Factor_UNIT_M3S <- Factor_MMH_M3S; }
+      if(inherits(OutputsModel,"daily"  )){ Factor_UNIT_M3S <- Factor_MMD_M3S; }
+      if(inherits(OutputsModel,"monthly")){ Factor_UNIT_M3S <- Factor_MMM_M3S; }
+      if(inherits(OutputsModel,"yearly" )){ Factor_UNIT_M3S <- Factor_MMY_M3S; }
+    }
+  }
+
+  kPlot <- 0;
+
+  ##Precip
+  if(BOOL_Pobs){
+    kPlot <- kPlot+1; mar <- c(3,5,1,5);
+    par(new=FALSE,mar=mar,las=0)
+    ylim1 <- range(OutputsModel$Precip[IndPeriod_Plot],na.rm=TRUE); ylim2 <- ylim1;  ylim2 <- rev(ylim2); 
+    plot(Xaxis,OutputsModel$Precip[IndPeriod_Plot],type="h",ylim=ylim2,col="royalblue",lwd=0.7,xaxt="n",yaxt="n",xlab="",ylab="",xaxs="i",yaxs="i");
+    axis(side=2,at=pretty(ylim1),labels=pretty(ylim1),cex.axis=cexaxis)
+    par(las=0); mtext(side=2,paste("precip.  ",plotunit,sep=""),line=lineY,cex=cexlab,adj=1); par(las=0); 
+    if(BOOL_Psol){
+      par(new=TRUE);
+      for(iLayer in 1:NLayers){
+        if(iLayer==1){ PsolLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$Psol/NLayers; 
+              } else { PsolLayerMean <- PsolLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$Psol/NLayers; } }
+      plot(Xaxis,PsolLayerMean[IndPeriod_Plot],type="h",ylim=ylim2,col="lightblue",lwd=0.7,xaxt="n",yaxt="n",xlab="",ylab="",xaxs="i",yaxs="i");
+    }
+    if(BOOL_Dates){
+      axis(side=1,at=Seq1,labels=FALSE,cex.axis=cexaxis);
+      axis(side=1,at=Seq2,labels=format(OutputsModel$DatesR[IndPeriod_Plot],format="%m/%Y")[Seq2],lwd.ticks=1.5,cex.axis=cexaxis);
+    } else { axis(side=1,at=pretty(Xaxis),labels=pretty(Xaxis),cex.axis=cexaxis); }
+  }
+
+
+  ##SnowPack
+  if(BOOL_Snow){
+    kPlot <- kPlot+1; mar <- c(3,5,1,5);
+    par(new=FALSE,mar=mar,las=0)
+    ylim1 <- c(+99999,-99999)
+    for(iLayer in 1:NLayers){
+      ylim1[1] <- min(ylim1[1],OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack);
+      ylim1[2] <- max(ylim1[2],OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack);
+      if(iLayer==1){ SnowPackLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers; 
+            } else { SnowPackLayerMean <- SnowPackLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers; }
+    }
+    plot(SnowPackLayerMean[IndPeriod_Plot],type="l",ylim=ylim1,lwd=lwd*1.2,col="royalblue",xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i")
+    for(iLayer in 1:NLayers){ lines(OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack[IndPeriod_Plot],lty=3,col="royalblue",lwd=lwd*0.8); }
+    axis(side=2,at=pretty(ylim1),labels=pretty(ylim1),cex.axis=cexaxis)
+    par(las=0); mtext(side=2,paste("snow pack  ","[mm]",sep=""),line=lineY,cex=cexlab); par(las=0);
+    legend("topright",c(paste("mean snow pack",sep=""),paste("snow pack for each layer",sep="")),col=c("royalblue","royalblue"),lty=c(1,3),lwd=c(lwd*1.2,lwd*0.8),bty="o",bg=bgleg,box.col=bgleg,cex=cexleg)
+    box()
+    if(BOOL_Dates){
+      axis(side=1,at=Seq1,labels=FALSE,cex.axis=cexaxis);
+      axis(side=1,at=Seq2,labels=format(OutputsModel$DatesR[IndPeriod_Plot],format="%m/%Y")[Seq2],lwd.ticks=1.5,cex.axis=cexaxis);
+    } else { axis(side=1,at=pretty(Xaxis),labels=pretty(Xaxis),cex.axis=cexaxis); }
+  }
+
+
+  ##Flows
+  if(BOOL_Qsim){
+    kPlot <- kPlot+1; mar <- c(3,5,1,5);
+    par(new=FALSE,mar=mar,las=0)
+    ylim1 <- range(OutputsModel$Qsim[IndPeriod_Plot],na.rm=TRUE);
+    if(BOOL_Qobs){ ylim1 <- range(c(ylim1,Qobs[IndPeriod_Plot]),na.rm=TRUE); }
+    ylim2 <- c(ylim1[1],1.2*ylim1[2]);
+    plot(Xaxis,rep(NA,length(Xaxis)),type="n",ylim=ylim2,xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i");
+    txtleg <- NULL; colleg <- NULL;
+    if(BOOL_Qobs){ lines(Xaxis,Qobs[IndPeriod_Plot],lwd=lwd,lty=1,col="black"); txtleg <- c(txtleg,"observed"); colleg <- c(colleg,"black"); }
+    if(BOOL_Qsim){ lines(Xaxis,OutputsModel$Qsim[IndPeriod_Plot],lwd=lwd,lty=1,col="orangered"); txtleg <- c(txtleg,"simulated"); colleg <- c(colleg,"orangered"); }
+    axis(side=2,at=pretty(ylim1),labels=pretty(ylim1),cex.axis=cexaxis)
+    par(las=0); mtext(side=2,paste("flow  ",plotunit,sep=""),line=lineY,cex=cexlab); par(las=0);
+    if(!is.null(BasinArea)){
+      Factor <- Factor_UNIT_M3S;
+      axis(side=4,at=pretty(ylim1*Factor)/Factor,labels=pretty(ylim1*Factor),cex.axis=cexaxis);
+      par(las=0); mtext(side=4,paste("flow  ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); }
+    if(BOOL_Dates){
+      axis(side=1,at=Seq1,labels=FALSE,cex.axis=cexaxis);
+      axis(side=1,at=Seq2,labels=format(OutputsModel$DatesR[IndPeriod_Plot],format="%m/%Y")[Seq2],lwd.ticks=1.5,cex.axis=cexaxis);
+    } else { axis(side=1,at=pretty(Xaxis),labels=pretty(Xaxis),cex.axis=cexaxis); }
+    legend("topright",txtleg,col=colleg,lty=1,lwd=lwd,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg)
+    box()
+  }
+
+
+  ##Regime
+  if(BOOL_TS & BOOL_Qsim & (inherits(OutputsModel,"hourly") | inherits(OutputsModel,"daily"))){
+    kPlot <- kPlot+1; mar <- c(6,5,1,5); plotunitregime <- "[mm/month]";
+    par(new=FALSE,mar=mar,las=0)
+    ModelData <- as.data.frame(matrix(as.numeric(NA),nrow=length(IndPeriod_Plot),ncol=5));
+                   ModelData[,1] <- as.numeric(format(OutputsModel$DatesR[IndPeriod_Plot],format="%Y%m%d%H"));
+    if(BOOL_Pobs){ ModelData[,2] <- OutputsModel$Precip[IndPeriod_Plot]; }
+    if(BOOL_Psol){ ModelData[,3] <- PsolLayerMean[IndPeriod_Plot]; }
+    if(BOOL_Qobs){ ModelData[,4] <- Qobs[IndPeriod_Plot]; }
+    if(BOOL_Qsim){ ModelData[,5] <- OutputsModel$Qsim[IndPeriod_Plot]; }
+    colnames(ModelData) <- c("DatesModel","Precip","Psol","Qobs","Qsim");
+    TxtDatesModelData <- formatC(ModelData$DatesModel,format="d",width=8,flag="0");
+
+    if(inherits(OutputsModel,"hourly")){
+    DailyData <- as.data.frame(aggregate(ModelData[,2:5],by=list(as.numeric(substr(TxtDatesModelData,1,8))),FUN=sum,na.rm=T)); }
+    if(inherits(OutputsModel,"daily")){
+    DailyData <- ModelData; }
+    colnames(DailyData) <- c("DatesDaily","Precip","Psol","Qobs","Qsim");
+    TxtDatesDailyData <- formatC(DailyData$DatesDaily,format="d",width=8,flag="0");
+    MontlyData <- as.data.frame(aggregate(DailyData[,2:5],by=list(as.numeric(substr(TxtDatesDailyData,1,6))),FUN=sum,na.rm=T));
+    colnames(MontlyData) <- c("DatesMontly","Precip","Psol","Qobs","Qsim");
+    TxtDatesMontlyData <- formatC(MontlyData$DatesMontly,format="d",width=6,flag="0");
+
+    DailyDataAggregD <- as.data.frame(aggregate(DailyData[,2:5],by=list(as.numeric(substr(TxtDatesDailyData ,5,8))),FUN=mean,na.rm=T));
+    colnames(DailyDataAggregD) <- c("DatesDailyAggregD","Precip","Psol","Qobs","Qsim");
+    MonthlyDataAggregM <- as.data.frame(aggregate(MontlyData[,2:5],by=list(as.numeric(substr(TxtDatesMontlyData,5,6))),FUN=mean,na.rm=T));
+    colnames(MonthlyDataAggregM) <- c("DatesMonthlyAggregM","Precip","Psol","Qobs","Qsim");
+    Window <- 30; 
+    DailyDataAggregD2 <- DailyDataAggregD; MonthlyDataAggregM2 <- MonthlyDataAggregM;
+    if(plotunitregime=="[mm/month]"){ DailyDataAggregD2[  2:5] <- DailyDataAggregD2[  2:5]*Window; }
+    if(plotunitregime=="[mm/d]"    ){ MonthlyDataAggregM2[2:5] <- MonthlyDataAggregM2[2:5]/Window; }
+    DailyDataAggregD3 <- as.data.frame(cbind(DailyDataAggregD2$DatesDailyAggregD, 
+                                            MyRollMean2(DailyDataAggregD2$Precip,Window), MyRollMean2(DailyDataAggregD2$Psol,Window), 
+                                            MyRollMean2(DailyDataAggregD2$Qobs,Window)  , MyRollMean2(DailyDataAggregD2$Qsim,Window)));
+    colnames(DailyDataAggregD3) <- colnames(DailyDataAggregD2);
+    TxtDatesDailyAggregD3 <- formatC(DailyDataAggregD3$DatesDailyAggregD,format="d",width=4,flag="0");
+
+    xLabels  <- paste(substr(TxtDatesDailyAggregD3,3,4),"/",substr(TxtDatesDailyAggregD3,1,2),sep="")
+    Seq1 <- 1:nrow(DailyDataAggregD3);
+    SeqLab1 <- Seq1[substr(xLabels,1,2)=="01"];  SeqLab1 <- c(SeqLab1,length(xLabels)); xLabels1 <- xLabels[SeqLab1];
+    Seq2 <- Seq1[substr(xLabels,1,2)=="15"]; 
+    SeqLab2 <- Seq2;  xLabels2 <- c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
+    ylimQ <- range(c(DailyDataAggregD3$Qobs[Seq1],DailyDataAggregD3$Qsim[Seq1]),na.rm=TRUE);
+    if(BOOL_Pobs){ ylimP <- c(max(MonthlyDataAggregM2$Precip,na.rm=TRUE),0);  }
+
+    txtleg <- NULL; colleg <- NULL; lwdleg <- NULL;
+    lwdP=10
+    if(BOOL_Pobs){
+    plot(Seq2,MonthlyDataAggregM2$Precip[1:12],type="h",xlim=range(Seq1),ylim=c(3*ylimP[1],ylimP[2]),lwd=lwdP,lend=1,lty=1,col="royalblue",xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i",yaxs="i",bty="n")
+    txtleg <- c(txtleg,"Ptot" ); colleg <- c(colleg,"royalblue"); lwdleg <- c(lwdleg,lwdP/3); 
+    axis(side=2,at=pretty(0.8*ylimP,n=3),labels=pretty(0.8*ylimP,n=3),cex.axis=cexaxis,col.axis="royalblue",col.ticks="royalblue");
+    par(new=TRUE); }
+
+    if(BOOL_Psol){
+    plot(Seq2,MonthlyDataAggregM2$Psol[1:12],type="h",xlim=range(Seq1),ylim=c(3*ylimP[1],ylimP[2]),lwd=lwdP,lend=1,lty=1,col="lightblue",xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i",yaxs="i",bty="n");
+    txtleg <- c(txtleg,"Psol" ); colleg <- c(colleg,"lightblue"); lwdleg <- c(lwdleg,lwdP/3); 
+    par(new=TRUE); }
+
+    plot(0,0,type="n",xlim=range(Seq1),ylim=c(ylimQ[1],2*ylimQ[2]),xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i")
+    if(BOOL_Qobs){ lines(Seq1,DailyDataAggregD3$Qobs[Seq1],lwd=lwd,lty=1,col="black"    ); txtleg <- c(txtleg,"Qobs" ); colleg <- c(colleg,"black"    ); lwdleg <- c(lwdleg,lwd); }
+    if(BOOL_Qsim){ lines(Seq1,DailyDataAggregD3$Qsim[Seq1],lwd=lwd,lty=1,col="orangered"); txtleg <- c(txtleg,"Qsim"); colleg <- c(colleg,"orangered"); lwdleg <- c(lwdleg,lwd); }
+
+    axis(side=1,at=SeqLab1,tick=TRUE ,labels=xLabels1,cex.axis=cexaxis)
+    ### axis(side=1,at=SeqLab2,tick=FALSE,labels=xLabels2,cex.axis=cexaxis)
+    axis(side=2,at=pretty(ylimQ),labels=pretty(ylimQ),cex.axis=cexaxis)
+    par(las=0); mtext(side=1,paste("30-days rolling mean",sep=""),line=lineX,cex=cexlab); par(las=0);
+    posleg <- "topright"; txtlab <- "flow regime";
+    if(BOOL_Pobs){ posleg <- "right"; txtlab <- "precip. & flow regime"; }
+    par(las=0); mtext(side=2,paste(txtlab,"  ",plotunitregime,sep=""),line=lineY,cex=cexlab); par(las=0);
+    if(!is.null(BasinArea)){
+      Factor <- Factor_MMM_M3S;
+      axis(side=4,at=pretty(ylimQ*Factor)/Factor,labels=pretty(ylimQ*Factor),cex.axis=cexaxis);
+      par(las=0); mtext(side=4,paste("flow  ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); }
+    ### posleg <- "topright"; if(BOOL_Pobs){ posleg <- "right"; }
+    ### legend(posleg,txtleg,col=colleg,lty=1,lwd=lwdleg,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg)
+    box()
+  }
+
+
+  ##Cumulative_frequency
+  if((BOOL_Qsim | BOOL_Qobs) & BOOL_FilterZero){
+    kPlot <- kPlot+1; mar <- c(6,5,1,5);
+    par(new=FALSE,mar=mar,las=0)
+    xlim <- c(0,1);
+    ylim <- range(log(c(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero],OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero])),na.rm=TRUE);
+    seqDATA1 <- log(c(0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500,1000,2000,5000,10000)); seqDATA2 <- exp(seqDATA1);
+    plot(0,0,type="n",xlim=xlim,ylim=ylim,xaxt="n",yaxt="n",xlab="",ylab="",main="");
+    ### abline(h=0,lty=2,col=grey(0.5));
+    ### abline(h=1,lty=2,col=grey(0.5));
+    axis(side=1,at=pretty(xlim),labels=pretty(xlim),cex.axis=cexaxis);
+    par(las=0); mtext(side=1,text="non-exceedance prob. [-]",line=lineY,cex=cexlab); par(las=0);
+    axis(side=2,at=seqDATA1,labels=seqDATA2,cex.axis=cexaxis); 
+    par(las=0); mtext(side=2,text=paste("flow  ",plotunit,"",sep=""),line=lineY,cex=cexlab); par(las=0);
+    txtleg <- NULL; colleg <- NULL;
+    if(BOOL_Qobs){
+      DATA2 <- log(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]);
+      SeqQuant <- seq(0,1,by=1/(length(DATA2))); Quant <- as.numeric(quantile(DATA2,SeqQuant,na.rm=TRUE));
+      Fn <- ecdf(DATA2);  YY <- DATA2; YY <- YY[order( Fn(DATA2) )]; XX <- Fn(DATA2); XX <- XX[order( Fn(DATA2) )];
+      lines(XX,YY,lwd=1,col="black");
+      txtleg <- c(txtleg,"observed"); colleg <- c(colleg,"black"); }
+    if(BOOL_Qsim){
+      DATA2 <- log(OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]);
+      SeqQuant <- seq(0,1,by=1/(length(DATA2))); Quant <- as.numeric(quantile(DATA2,SeqQuant,na.rm=TRUE));
+      Fn <- ecdf(DATA2);  YY <- DATA2; YY <- YY[order( Fn(DATA2) )]; XX <- Fn(DATA2); XX <- XX[order( Fn(DATA2) )];
+      lines(XX,YY,lwd=1,col="orangered");
+      txtleg <- c(txtleg,"simulated"); colleg <- c(colleg,"orangered"); }
+    if(!is.null(BasinArea)){
+      Factor <- Factor_UNIT_M3S;
+      axis(side=4,at=seqDATA1,labels=round(seqDATA2*Factor),cex.axis=cexaxis);
+      par(las=0); mtext(side=4,paste("flow  ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); }
+    legend("topleft",title="log scale",txtleg,col=colleg,lty=1,lwd=lwd,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg)
+    box()
+  }
+
+
+  ##Correlation_QQ
+  if(BOOL_Qsim & BOOL_Qobs & BOOL_FilterZero){
+    kPlot <- kPlot+1; mar <- c(6,5,1,5);
+    par(new=FALSE,mar=mar,las=0)
+    ylim <- log(range(c(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero],OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]),na.rm=TRUE));
+    plot(log(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]),log(OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]),type="p",pch=1,cex=0.9,col="black",xlim=ylim,ylim=ylim,xaxt="n",yaxt="n",xlab="",ylab="")
+    abline(a=0,b=1,col="royalblue");
+    seqDATA1 <- log(c(0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500,1000,2000,5000,10000)); seqDATA2 <- exp(seqDATA1);
+    axis(side=1,at=seqDATA1,labels=seqDATA2,cex=cexaxis);
+    axis(side=2,at=seqDATA1,labels=seqDATA2,cex=cexaxis);
+    par(las=0); mtext(side=1,paste("observed flow  ",plotunit,"",sep=""),line=lineX,cex=cexlab); par(las=0);
+    par(las=0); mtext(side=2,paste("simulated flow  ",plotunit,"",sep=""),line=lineY,cex=cexlab); par(las=0);
+    if(!is.null(BasinArea)){
+      Factor <- Factor_UNIT_M3S;
+      axis(side=4,at=seqDATA1,labels=round(seqDATA2*Factor),cex.axis=cexaxis);
+      par(las=0); mtext(side=4,paste("flow  ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); }
+    legend("bottomright","log scale",lty=1,col=NA,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg)
+    box()
+  }
+
+  ##Empty_plots
+  while(kPlot < iPlotMax){
+    kPlot <- kPlot+1;
+    par(new=FALSE)
+    plot(0,0,type="n",xlab="",ylab="",axes=FALSE)
+  }
+
+  ##Restoring_layout_options
+  layout(1);
+  
+
+}
diff --git a/airGR.Rproj b/airGR.Rproj
new file mode 100644
index 00000000..21a4da08
--- /dev/null
+++ b/airGR.Rproj
@@ -0,0 +1,17 @@
+Version: 1.0
+
+RestoreWorkspace: Default
+SaveWorkspace: Default
+AlwaysSaveHistory: Default
+
+EnableCodeIndexing: Yes
+UseSpacesForTab: Yes
+NumSpacesForTab: 2
+Encoding: UTF-8
+
+RnwWeave: Sweave
+LaTeX: pdfLaTeX
+
+BuildType: Package
+PackageUseDevtools: Yes
+PackageInstallArgs: --no-multiarch --with-keep.source
diff --git a/help/AnIndex b/help/AnIndex
deleted file mode 100644
index 40110702..00000000
--- a/help/AnIndex
+++ /dev/null
@@ -1,31 +0,0 @@
-airGR	airGR
-BasinInfo	BasinInfo
-BasinObs	BasinObs
-Calibration	Calibration
-Calibration_HBAN	Calibration_HBAN
-Calibration_optim	Calibration_optim
-CreateCalibOptions	CreateCalibOptions
-CreateInputsCrit	CreateInputsCrit
-CreateInputsModel	CreateInputsModel
-CreateRunOptions	CreateRunOptions
-DataAltiExtrapolation_HBAN	DataAltiExtrapolation_HBAN
-ErrorCrit	ErrorCrit
-ErrorCrit_KGE	ErrorCrit_KGE
-ErrorCrit_KGE2	ErrorCrit_KGE2
-ErrorCrit_NSE	ErrorCrit_NSE
-ErrorCrit_RMSE	ErrorCrit_RMSE
-PEdaily_Oudin	PEdaily_Oudin
-plot_OutputsModel	plot_OutputsModel
-RunModel	RunModel
-RunModel_CemaNeige	RunModel_CemaNeige
-RunModel_CemaNeigeGR4J	RunModel_CemaNeigeGR4J
-RunModel_CemaNeigeGR5J	RunModel_CemaNeigeGR5J
-RunModel_CemaNeigeGR6J	RunModel_CemaNeigeGR6J
-RunModel_GR4J	RunModel_GR4J
-RunModel_GR5J	RunModel_GR5J
-RunModel_GR6J	RunModel_GR6J
-TransfoParam	TransfoParam
-TransfoParam_CemaNeige	TransfoParam_CemaNeige
-TransfoParam_GR4J	TransfoParam_GR4J
-TransfoParam_GR5J	TransfoParam_GR5J
-TransfoParam_GR6J	TransfoParam_GR6J
diff --git a/help/airGR.rdb b/help/airGR.rdb
deleted file mode 100644
index c2e536114b01a2fdcea611ade64d2a97338450d8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 115007
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
F{(n!_>RSK+

diff --git a/help/airGR.rdx b/help/airGR.rdx
deleted file mode 100644
index faa5881e53cfa6d45fc7f6690a48a82e958bbb60..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 836
zcmV-K1H1emiwFP!0000027T6BNEBfd2k<kxmaDCK$!j;OhbV${-1P=Ux^3$vFKrQN
zgp4}c=<duiJ6cge1wlnofn*Vw50x*y<Vz$J)LThCS-lhyK^KU?o_eu5yF0UI&aSyI
zJM%mLneRI@vom@q3jop}9hbE9=w<<arJL*ZxVU0D2&=GsiJUPF;HW2O<1sk`xvU(Z
z@B_KB6d?B;x$zM|(Q9(|B*4nc<l!dtH}a`g9CI^yd<-|6$oJ;4havK`5%0<J)9dId
z@@xPgtDXFI2Egehe=5OqoF#w#jrl(EuR-juE@2_<8J^Eka#;&N@fEU&#}~XO`+oxD
zdC1*60rC}c=s8*^pWO?vY>s?!7kUTz+AXv}zPS}m*IT&r0zF2a8piQ^$ur+EKZy4f
z&kY1{fD_jlsuYqVxRD$CF~p0`Mk%7G&FX+=7BXXnj^2prY_AkldUeTAG}SES+Dbi5
zjScN)J<nd(!iEwugM6<pONJbaJHpX8k{BwMG^^neBjVK+BQcb%-lp}-L4H7BMCAjO
z?UoFwA!sPR<AyGUwO~qjPM@x8x@`_uqR`Xo_nE~URuofrZQsAhu7S2h)z#_imz3a%
zo{o`z#kyjd*suL8@-6px<&e}aD}%C`6s0EqfV*X>)U#w-ZKbY6Y8%jA^ek3P9KPa!
zE~$|Lty9t^>%JD*YbmFa$5Pv*$${s8L1OX@NzwfQYp-xnGw|{n^xFXVllqd2exffr
z%Qx@=6gHCY;sY!ck{=#Mmy(|xLzj_X)^fj@<o>vTUQPb;nU6o;j9y0%sSrJW1Lckh
z)~`^yh2=u!JMKMmY<{6@6PsTMPH~@cqf5va%F*TItEbUx$m6&c){-Y4FoW|4x|s6&
zN6<Os$FJCUQ0m~`zQEmZo4e~gzn(+ecz&`Xo=0DD!r!F#+A>)kt*@^%wLGp0&ZJc2
ztm1TYdN`{&YdC8;>sXI`T9NlC@*c&coq3NU?@{DEio8dW_bBonMcyNyr;7JjRmt{s
zGkKV*nQEA7nd;)tG(`WQ5#kHG&*|1%eN@sFsW&KFe+aU4c|g`>wT~)&S}3f`k%-(M
O9rPc2IW?Ii2><{-`=km0

diff --git a/help/aliases.rds b/help/aliases.rds
deleted file mode 100644
index d4695054f9183d8afa18cb8149bc7fc087dd571e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 314
zcmV-A0mc3wiwFP!000002JMnTPlGTNfGeBHP%&eN9lZD-jCkLW;ARF3dhkZxLT8#l
zOG-)f&l?LVO&N1P!0Z6@eP8<?58lTWLdZfRd0C@oIhD72G)A_3UIO7^q5^vf6`?D-
zX9`SO5br7#U;B`g9S1=eRcLCU^kun-6n9O|N<j)GW<JLtaI538(UnfsniVZ;QTdz*
zoyy=Fmf^gAAgO6T(cLo$Smc5PUxGu)^1<8L0q2YxH5?7n*Dz4<wg(@ETcfulTa%5Z
z&Nj$^<lkvrXQcaLZkaP7i8yR$A{#N|Sr?~1E+E3>6Du<xnlO1>pR(Rb`_x%STO*+f
zy<<=xzj^0Ct3BHShwg{ZO*Ux7?OCJfq453^vN#%BQe1R1O`*V5Gau(cKM(r<8g%sY
M3+}Mk6wd_!0Qb&|d;kCd

diff --git a/help/paths.rds b/help/paths.rds
deleted file mode 100644
index ed7b113c90e5bacda0c830671b0f9252e03fe4d1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 352
zcmV-m0iXUKiwFP!000002Cdc4PJ=KQ0Ptq>q9@<LHvnUXCQCE|B5rd)(1SPfO*&Ik
zT2e})Z!g0spu5oaP-qDG<@-l@IY9_b(6m{TX|qMA%{oIz=(xGx_;dRXBxH~L6{wvE
z{*Gm30})~Rea+6TD{HoYQUJ3(s0drIEw|EquUsoC@uupK+wq7Glxze@!dd48T2A)h
zxlxDR>tVc<r0BFzK@%7xZq2ydnU!9qEw^B0Eh}FTsh4RFTk{-K1EHlg`<G`t9^1X{
zQb~djDWK%^P;V7xKM;b8Vck3pC0m6-C;6Jvg`uFLCsRSC>prCrR1)Ms=w}w!IbmAo
zO*2=2MpWTr{6R7w7Z73chC6O$f(z5x(m3guCoh*;ZT%&O`RYlIF{z)OJ6?Jgz^W}z
yKtQ2Y`95@L<P?tV0XeL`zUCO!`dyfh*V>&{JSF9_IeBFN_x1%JZ6zs92><|Ov7-L~

diff --git a/html/00Index.html b/html/00Index.html
deleted file mode 100644
index b1aa97bd..00000000
--- a/html/00Index.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><title>R: Modelling tools used at Irstea-HBAN (France), including GR4J,
-GR5J, GR6J and CemaNeige</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<link rel="stylesheet" type="text/css" href="R.css">
-</head><body>
-<h1> Modelling tools used at Irstea-HBAN (France), including GR4J,
-GR5J, GR6J and CemaNeige
-<img class="toplogo" src="../../../doc/html/logo.jpg" alt="[R logo]">
-</h1>
-<hr>
-<div align="center">
-<a href="../../../doc/html/packages.html"><img src="../../../doc/html/left.jpg" alt="[Up]" width="30" height="30" border="0"></a>
-<a href="../../../doc/html/index.html"><img src="../../../doc/html/up.jpg" alt="[Top]" width="30" height="30" border="0"></a>
-</div><h2>Documentation for package &lsquo;airGR&rsquo; version 0.7.4</h2>
-
-<ul><li><a href="../DESCRIPTION">DESCRIPTION file</a>.</li>
-</ul>
-
-<h2>Help Pages</h2>
-
-
-<table width="100%">
-<tr><td width="25%"><a href="airGR.html">airGR</a></td>
-<td>Modelling tools used at Irstea-HBAN (France), including GR4J, GR5J, GR6J and CemaNeige</td></tr>
-<tr><td width="25%"><a href="BasinInfo.html">BasinInfo</a></td>
-<td>Data sample: characteristics of a fictional catchment (L0123001, L0123002 or L0123003)</td></tr>
-<tr><td width="25%"><a href="BasinObs.html">BasinObs</a></td>
-<td>Data sample: time series of observations of a fictional catchment (L0123001, L0123002 or L0123003)</td></tr>
-<tr><td width="25%"><a href="Calibration.html">Calibration</a></td>
-<td>Calibration algorithm which minimises an error criterion on the model outputs using the provided functions</td></tr>
-<tr><td width="25%"><a href="Calibration_HBAN.html">Calibration_HBAN</a></td>
-<td>Calibration algorithm which minimises the error criterion using the Irstea-HBAN procedure</td></tr>
-<tr><td width="25%"><a href="Calibration_optim.html">Calibration_optim</a></td>
-<td>Calibration algorithm which minimises the error criterion using the stats::optim function</td></tr>
-<tr><td width="25%"><a href="CreateCalibOptions.html">CreateCalibOptions</a></td>
-<td>Creation of the CalibOptions object required to the Calibration functions</td></tr>
-<tr><td width="25%"><a href="CreateInputsCrit.html">CreateInputsCrit</a></td>
-<td>Creation of the InputsCrit object required to the ErrorCrit functions</td></tr>
-<tr><td width="25%"><a href="CreateInputsModel.html">CreateInputsModel</a></td>
-<td>Creation of the InputsModel object required to the RunModel functions</td></tr>
-<tr><td width="25%"><a href="CreateRunOptions.html">CreateRunOptions</a></td>
-<td>Creation of the RunOptions object required to the RunModel functions</td></tr>
-<tr><td width="25%"><a href="DataAltiExtrapolation_HBAN.html">DataAltiExtrapolation_HBAN</a></td>
-<td>Altitudinal extrapolation of precipitation and temperature series</td></tr>
-<tr><td width="25%"><a href="ErrorCrit.html">ErrorCrit</a></td>
-<td>Error criterion using the provided function</td></tr>
-<tr><td width="25%"><a href="ErrorCrit_KGE.html">ErrorCrit_KGE</a></td>
-<td>Error criterion based on the KGE formula</td></tr>
-<tr><td width="25%"><a href="ErrorCrit_KGE2.html">ErrorCrit_KGE2</a></td>
-<td>Error criterion based on the KGE' formula</td></tr>
-<tr><td width="25%"><a href="ErrorCrit_NSE.html">ErrorCrit_NSE</a></td>
-<td>Error criterion based on the NSE formula</td></tr>
-<tr><td width="25%"><a href="ErrorCrit_RMSE.html">ErrorCrit_RMSE</a></td>
-<td>Error criterion based on the RMSE</td></tr>
-<tr><td width="25%"><a href="PEdaily_Oudin.html">PEdaily_Oudin</a></td>
-<td>Computation of daily series of potential evapotranspiration with Oudin's formula</td></tr>
-<tr><td width="25%"><a href="plot_OutputsModel.html">plot_OutputsModel</a></td>
-<td>Default preview of model outputs</td></tr>
-<tr><td width="25%"><a href="RunModel.html">RunModel</a></td>
-<td>Run with the provided hydrological model function</td></tr>
-<tr><td width="25%"><a href="RunModel_CemaNeige.html">RunModel_CemaNeige</a></td>
-<td>Run with the CemaNeige snow module</td></tr>
-<tr><td width="25%"><a href="RunModel_CemaNeigeGR4J.html">RunModel_CemaNeigeGR4J</a></td>
-<td>Run with the CemaNeigeGR4J hydrological model</td></tr>
-<tr><td width="25%"><a href="RunModel_CemaNeigeGR5J.html">RunModel_CemaNeigeGR5J</a></td>
-<td>Run with the CemaNeigeGR5J hydrological model</td></tr>
-<tr><td width="25%"><a href="RunModel_CemaNeigeGR6J.html">RunModel_CemaNeigeGR6J</a></td>
-<td>Run with the CemaNeigeGR6J hydrological model</td></tr>
-<tr><td width="25%"><a href="RunModel_GR4J.html">RunModel_GR4J</a></td>
-<td>Run with the GR4J hydrological model</td></tr>
-<tr><td width="25%"><a href="RunModel_GR5J.html">RunModel_GR5J</a></td>
-<td>Run with the GR5J hydrological model</td></tr>
-<tr><td width="25%"><a href="RunModel_GR6J.html">RunModel_GR6J</a></td>
-<td>Run with the GR6J hydrological model</td></tr>
-<tr><td width="25%"><a href="TransfoParam.html">TransfoParam</a></td>
-<td>Transformation of the parameters using the provided function</td></tr>
-<tr><td width="25%"><a href="TransfoParam_CemaNeige.html">TransfoParam_CemaNeige</a></td>
-<td>Transformation of the parameters from the CemaNeige module</td></tr>
-<tr><td width="25%"><a href="TransfoParam_GR4J.html">TransfoParam_GR4J</a></td>
-<td>Transformation of the parameters from the GR4J model</td></tr>
-<tr><td width="25%"><a href="TransfoParam_GR5J.html">TransfoParam_GR5J</a></td>
-<td>Transformation of the parameters from the GR5J model</td></tr>
-<tr><td width="25%"><a href="TransfoParam_GR6J.html">TransfoParam_GR6J</a></td>
-<td>Transformation of the parameters from the GR6J model</td></tr>
-</table>
-</body></html>
diff --git a/html/R.css b/html/R.css
deleted file mode 100644
index 6f058f3d..00000000
--- a/html/R.css
+++ /dev/null
@@ -1,57 +0,0 @@
-BODY{		background: white;
-		color: black }
-
-A:link{         background: white;
-                color: blue }
-A:visited{	background: white;
-		color: rgb(50%, 0%, 50%) }
-
-H1{		background: white;
-		color: rgb(55%, 55%, 55%);
-		font-family: monospace;
-		font-size: x-large;
-		text-align: center }
-
-H2{		background: white;
-		color: rgb(40%, 40%, 40%);
-		font-family: monospace;
-		font-size: large;
-		text-align: center }
-
-H3{		background: white;
-		color: rgb(40%, 40%, 40%);
-		font-family: monospace;
-		font-size: large }
-
-H4{		background: white;
-		color: rgb(40%, 40%, 40%);
-		font-family: monospace;
-		font-style: italic;
-		font-size: large }
-
-H5{		background: white;
-		color: rgb(40%, 40%, 40%);
-		font-family: monospace }
-
-H6{		background: white;
-		color: rgb(40%, 40%, 40%);
-		font-family: monospace;
-		font-style: italic }
-		
-IMG.toplogo{	vertical-align: middle }
-
-IMG.arrow{	width: 30px;
-		height: 30px;
-		border: 0 }
-
-span.acronym{font-size: small}
-span.env{font-family: monospace}
-span.file{font-family: monospace}
-span.option{font-family: monospace}
-span.pkg{font-weight: bold}
-span.samp{font-family: monospace}
-
-div.vignettes a:hover {
-  background: rgb(85%, 85%, 85%);
-}
-
diff --git a/man/BasinInfo.Rd b/man/BasinInfo.Rd
new file mode 100644
index 00000000..918ae1dc
--- /dev/null
+++ b/man/BasinInfo.Rd
@@ -0,0 +1,21 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\docType{data}
+\encoding{UTF-8}
+\name{BasinInfo}
+\alias{BasinInfo}
+\title{Data sample: characteristics of a fictional catchment (L0123001, L0123002 or L0123003)}
+\format{List named 'BasinInfo' containing
+\itemize{
+\item two strings: catchment's code and station's name
+\item one float: catchment's area in km2
+\item one numeric vector: catchment's hypsometric curve (min, quantiles 01 to 99 and max) in metres
+}}
+\description{
+R-object containing the code, station's name, area and hypsometric curve of the catchment.
+}
+\examples{
+require(airGR)
+   data(L0123001)
+   str(BasinInfo)
+}
+
diff --git a/man/BasinObs.Rd b/man/BasinObs.Rd
new file mode 100644
index 00000000..57b3de56
--- /dev/null
+++ b/man/BasinObs.Rd
@@ -0,0 +1,22 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\docType{data}
+\encoding{UTF-8}
+\name{BasinObs}
+\alias{BasinObs}
+\title{Data sample: time series of observations of a fictional catchment (L0123001, L0123002 or L0123003)}
+\format{Data frame named 'BasinObs' containing
+\itemize{
+\item one POSIXlt vector: time series dates in the POSIXlt format
+\item five numeric vectors: time series of catchment average precipitation [mm], catchment average air temperature [degC], catchment average potential evapotranspiration [mm], outlet discharge [l/s], outlet discharge [mm]
+}}
+\description{
+R-object containing the times series of precipitation, temperature, potential evapotranspiration and discharges. \cr
+Times series for L0123001 or L0123002 are at the daily time-step for use with daily models such as GR4J, GR5J, GR6J, CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J.
+Times series for L0123003 are at the hourly time-step for use with hourly models such as GR4H.
+}
+\examples{
+require(airGR)
+   data(L0123001)
+   str(BasinObs)
+}
+
diff --git a/man/Calibration.Rd b/man/Calibration.Rd
new file mode 100644
index 00000000..2df07d6d
--- /dev/null
+++ b/man/Calibration.Rd
@@ -0,0 +1,94 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{Calibration}
+\alias{Calibration}
+\title{Calibration algorithm which minimises an error criterion on the model outputs using the provided functions}
+\usage{
+Calibration(InputsModel, RunOptions, InputsCrit, CalibOptions, FUN_MOD,
+  FUN_CRIT, FUN_CALIB = Calibration_HBAN, FUN_TRANSFO = NULL,
+  quiet = FALSE)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{CalibOptions}{[object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details}
+
+\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}
+
+\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)}
+
+\item{FUN_CALIB}{(optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN}
+
+\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] see \code{\link{Calibration_HBAN}} or \code{\link{Calibration_optim}}
+}
+\description{
+Calibration algorithm which minimises the error criterion using the provided functions. \cr
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## calibration period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## calibration criterion: preparation of the InputsCrit object
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+
+## preparation of CalibOptions object
+CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN)
+
+## calibration
+OutputsCalib <- Calibration(InputsModel=InputsModel,RunOptions=RunOptions,InputsCrit=InputsCrit,
+                            CalibOptions=CalibOptions,FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE,
+                            FUN_CALIB=Calibration_HBAN)
+
+## simulation
+Param <- OutputsCalib$ParamFinalR
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{Calibration_HBAN}}, \code{\link{Calibration_optim}},
+         \code{\link{RunModel}}, \code{\link{ErrorCrit}}, \code{\link{TransfoParam}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}},
+         \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}.
+}
+
diff --git a/man/Calibration_HBAN.Rd b/man/Calibration_HBAN.Rd
new file mode 100644
index 00000000..de3650a0
--- /dev/null
+++ b/man/Calibration_HBAN.Rd
@@ -0,0 +1,127 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{Calibration_HBAN}
+\alias{Calibration_HBAN}
+\title{Calibration algorithm which minimises the error criterion using the Irstea-HBAN procedure}
+\usage{
+Calibration_HBAN(InputsModel, RunOptions, InputsCrit, CalibOptions, FUN_MOD,
+  FUN_CRIT, FUN_TRANSFO = NULL, quiet = FALSE)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{CalibOptions}{[object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details}
+
+\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}
+
+\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)}
+
+\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$ParamFinalR  }  \tab   [numeric] parameter set obtained at the end of the calibration \cr
+         \emph{$CritFinal    }  \tab   [numeric] error criterion obtained at the end of the calibration \cr
+         \emph{$NIter        }  \tab   [numeric] number of iterations during the calibration \cr
+         \emph{$NRuns        }  \tab   [numeric] number of model runs done during the calibration \cr
+         \emph{$HistParamR   }  \tab   [numeric] table showing the progression steps in the search for optimal set: parameter values \cr
+         \emph{$HistCrit     }  \tab   [numeric] table showing the progression steps in the search for optimal set: criterion values \cr
+         \emph{$MatBoolCrit  }  \tab   [boolean] table giving the requested and actual time steps when the model is calibrated \cr
+         \emph{$CritName     }  \tab   [character] name of the calibration criterion \cr
+         \emph{$CritBestValue}  \tab   [numeric] theoretical best criterion value \cr
+         }
+}
+\description{
+Calibration algorithm which minimises the error criterion. \cr
+\cr
+The algorithm is based on a local search procedure.
+First, a screening is performed using either a rough predefined grid or a list of parameter sets
+and then a simple steepest descent local search algorithm is performed.
+}
+\details{
+A screening is first performed either from a rough predefined grid (considering various initial
+values for each paramete) or from a list of initial parameter sets. \cr
+The best set identified in this screening is then used as a starting point for the steepest
+descent local search algorithm. \cr
+For this search, the parameters are used in a transformed version, to obtain uniform
+variation ranges (and thus a similar pace), while the true ranges might be quite different. \cr
+At each iteration, we start from a parameter set of NParam values (NParam being the number of
+free parameters of the chosen hydrological model) and we determine the 2*NParam-1 new candidates
+by changing one by one the different parameters (+/- pace). \cr
+All these candidates are tested and the best one kept to be the starting point for the next
+iteration. At the end of each iteration, the pace is either increased or decreased to adapt
+the progression speed. A diagonal progress can occasionally be done.                        \cr
+The calibration algorithm stops when the pace becomes too small.                            \cr
+
+To optimise the exploration of the parameter space, transformation functions are used to convert
+the model parameters. This is done using the TransfoParam functions.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## calibration period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## calibration criterion: preparation of the InputsCrit object
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+
+## preparation of CalibOptions object
+CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN)
+
+## calibration
+OutputsCalib <- Calibration_HBAN(InputsModel=InputsModel,RunOptions=RunOptions,
+                                 InputsCrit=InputsCrit,CalibOptions=CalibOptions,
+                                 FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE)
+
+## simulation
+Param <- OutputsCalib$ParamFinalR
+OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (August 2013)
+}
+\references{
+Michel, C. (1991),
+       Hydrologie appliquée aux petits bassins ruraux, Hydrology handout (in French), Cemagref, Antony, France.
+}
+\seealso{
+\code{\link{Calibration}}, \code{\link{Calibration_optim}},
+         \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}},
+         \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}.
+}
+
diff --git a/man/Calibration_optim.Rd b/man/Calibration_optim.Rd
new file mode 100644
index 00000000..a32d0063
--- /dev/null
+++ b/man/Calibration_optim.Rd
@@ -0,0 +1,103 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{Calibration_optim}
+\alias{Calibration_optim}
+\title{Calibration algorithm which minimises the error criterion using the stats::optim function}
+\usage{
+Calibration_optim(InputsModel, RunOptions, InputsCrit, CalibOptions, FUN_MOD,
+  FUN_CRIT, FUN_TRANSFO = NULL, quiet = FALSE)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{CalibOptions}{[object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details}
+
+\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}
+
+\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)}
+
+\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$ParamFinalR  }  \tab   [numeric] parameter set obtained at the end of the calibration \cr
+         \emph{$CritFinal    }  \tab   [numeric] error criterion obtained at the end of the calibration \cr
+         \emph{$Nruns        }  \tab   [numeric] number of model runs done during the calibration \cr
+         \emph{$CritName     }  \tab   [character] name of the calibration criterion \cr
+         \emph{$CritBestValue}  \tab   [numeric] theoretical best criterion value \cr
+         }
+}
+\description{
+Calibration algorithm which minimises the error criterion. \cr
+\cr
+The algorithm is based on the "optim" function from the "stats" R-package
+(using method="L-BFGS-B", i.e. a local optimization quasi-Newton method).
+}
+\details{
+To optimise the exploration of the parameter space, transformation functions are used to convert
+the model parameters. This is done using the TransfoParam functions.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## calibration period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## calibration criterion: preparation of the InputsCrit object
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+
+## preparation of CalibOptions object
+CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_optim)
+
+## calibration
+OutputsCalib <- Calibration_optim(InputsModel=InputsModel,RunOptions=RunOptions,
+                                  InputsCrit=InputsCrit,CalibOptions=CalibOptions,
+                                  FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE)
+
+## simulation
+Param <- OutputsCalib$ParamFinalR
+OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+}
+\author{
+Laurent Coron (August 2013)
+}
+\seealso{
+\code{\link{Calibration}}, \code{\link{Calibration_HBAN}},
+         \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}},
+         \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}.
+}
+
diff --git a/man/CreateCalibOptions.Rd b/man/CreateCalibOptions.Rd
new file mode 100644
index 00000000..4efc8cb5
--- /dev/null
+++ b/man/CreateCalibOptions.Rd
@@ -0,0 +1,128 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{CreateCalibOptions}
+\alias{CreateCalibOptions}
+\title{Creation of the CalibOptions object required to the Calibration functions}
+\usage{
+CreateCalibOptions(FUN_MOD, FUN_CALIB = Calibration_HBAN,
+  FUN_TRANSFO = NULL, RunOptions = NULL, OptimParam = NULL,
+  FixedParam = NULL, SearchRanges = NULL, StartParam = NULL,
+  StartParamList = NULL, StartParamDistrib = NULL)
+}
+\arguments{
+\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}
+
+\item{FUN_CALIB}{(optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN}
+
+\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined}
+
+\item{RunOptions}{(optional) [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{OptimParam}{(optional) [boolean] vector of booleans indicating which parameters must be optimised (NParam columns, 1 line)}
+
+\item{FixedParam}{(optional) [numeric] vector giving the values to allocate to non-optimised parameter values (NParam columns, 1 line)}
+
+\item{SearchRanges}{(optional) [numeric] matrix giving the ranges of real parameters (NParam columns, 2 lines)
+\tabular{llllll}{
+              \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+     [1,]     \tab    0   \tab   -1   \tab    0   \tab  ...    \tab  0.0 \cr
+     [2,]     \tab 3000   \tab   +1   \tab  100   \tab  ...    \tab  3.0 \cr
+}}
+
+\item{StartParam}{(optional) [numeric] vector of parameter values used to start global search calibration procedure (e.g. Calibration_optim)
+\tabular{llllll}{
+              \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+              \tab 1000   \tab -0.5   \tab   22   \tab  ...    \tab  1.1 \cr
+}}
+
+\item{StartParamList}{(optional) [numeric] matrix of parameter sets used for grid-screening calibration procedure (values in columns, sets in line)
+\tabular{llllll}{
+              \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+     [set1]   \tab  800   \tab -0.7   \tab   25   \tab  ...    \tab  1.0 \cr
+     [set2]   \tab 1000   \tab -0.5   \tab   22   \tab  ...    \tab  1.1 \cr
+     [...]    \tab  ...   \tab  ...   \tab  ...   \tab  ...    \tab  ... \cr
+     [set n]  \tab  200   \tab -0.3   \tab   17   \tab  ...    \tab  1.0 \cr
+}}
+
+\item{StartParamDistrib}{(optional) [numeric] matrix of parameter values used for grid-screening calibration procedure (values in columns, percentiles in line) \cr
+\tabular{llllll}{
+              \tab [X1]   \tab [X2]   \tab [X3]   \tab [...]   \tab [Xi] \cr
+     [value1] \tab  800   \tab -0.7   \tab   25   \tab  ...    \tab  1.0 \cr
+     [value2] \tab 1000   \tab   NA   \tab   50   \tab  ...    \tab  1.2 \cr
+     [value3] \tab 1200   \tab   NA   \tab   NA   \tab  ...    \tab  1.6 \cr
+}}
+}
+\value{
+[list] object of class \emph{CalibOptions} containing the data required to evaluate the model outputs; it can include the following:
+         \tabular{ll}{
+         \emph{$OptimParam       }  \tab   [boolean] vector of booleans indicating which parameters must be optimised \cr
+         \emph{$FixedParam       }  \tab   [numeric] vector giving the values to allocate to non-optimised parameter values \cr
+         \emph{$SearchRanges     }  \tab   [numeric] matrix giving the ranges of real parameters \cr
+         \emph{$StartParam       }  \tab   [numeric] vector of parameter values used to start global search calibration procedure \cr
+         \emph{$StartParamList   }  \tab   [numeric] matrix of parameter sets used for grid-screening calibration procedure \cr
+         \emph{$StartParamDistrib}  \tab   [numeric] matrix of parameter values used for grid-screening calibration procedure \cr
+         }
+}
+\description{
+Creation of the CalibOptions object required to the Calibration functions.
+}
+\details{
+Users wanting to use FUN_MOD, FUN_CALIB or FUN_TRANSFO functions that are not included in
+the package must create their own CalibOptions object accordingly.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## calibration period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## calibration criterion: preparation of the InputsCrit object
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+
+## preparation of CalibOptions object
+CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN)
+
+## calibration
+OutputsCalib <- Calibration(InputsModel=InputsModel,RunOptions=RunOptions,InputsCrit=InputsCrit,
+                            CalibOptions=CalibOptions,FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE,
+                            FUN_CALIB=Calibration_HBAN)
+
+## simulation
+Param <- OutputsCalib$ParamFinalR
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}
+}
+
diff --git a/man/CreateInputsCrit.Rd b/man/CreateInputsCrit.Rd
new file mode 100644
index 00000000..413c4455
--- /dev/null
+++ b/man/CreateInputsCrit.Rd
@@ -0,0 +1,112 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{CreateInputsCrit}
+\alias{CreateInputsCrit}
+\title{Creation of the InputsCrit object required to the ErrorCrit functions}
+\usage{
+CreateInputsCrit(FUN_CRIT, InputsModel, RunOptions, Qobs, BoolCrit = NULL,
+  transfo = "", Ind_zeroes = NULL, epsilon = NULL)
+}
+\arguments{
+\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)}
+
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Qobs}{[numeric] series of observed discharges [mm]}
+
+\item{BoolCrit}{(optional) [boolean] boolean giving the time steps to consider in the computation (all time steps are consider by default)}
+
+\item{transfo}{(optional) [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort")}
+
+\item{Ind_zeroes}{(optional) [numeric] indices of the time-steps where zeroes are observed}
+
+\item{epsilon}{(optional) [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty}
+}
+\value{
+[list] object of class \emph{InputsCrit} containing the data required to evaluate the model outputs; it can include the following:
+         \tabular{ll}{
+         \emph{$BoolCrit  }  \tab   [boolean] boolean giving the time steps to consider in the computation \cr
+         \emph{$Qobs      }  \tab   [numeric] series of observed discharges [mm] \cr
+         \emph{$transfo   }  \tab   [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort") \cr
+         \emph{$Ind_zeroes}  \tab   [numeric] indices of the time-steps where zeroes are observed \cr
+         \emph{$epsilon   }  \tab   [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty \cr
+         }
+}
+\description{
+Creation of the InputsCrit object required to the ErrorCrit functions.
+}
+\details{
+Users wanting to use FUN_CRIT functions that are not included in
+the package must create their own InputsCrit object accordingly.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J)
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Nash-Sutcliffe Efficiency on log-transformed flows
+transfo <- "log"
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],transfo=transfo)
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Nash-Sutcliffe Efficiency above a threshold (q75\%)
+BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); 
+BoolCrit[BasinObs$Qmm[Ind_Run]<quantile(BasinObs$Qmm[Ind_Run],0.75,na.rm=TRUE)] <- FALSE;
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit)
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+cat(paste("SubCrit  ",OutputsCrit$SubCritNames,"  ",round(OutputsCrit$SubCritValues,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency below a threshold (q10\%) on log-trqansformed flows
+transfo  <- "log"
+BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); 
+BoolCrit[BasinObs$Qmm[Ind_Run]>quantile(BasinObs$Qmm[Ind_Run],0.10,na.rm=TRUE)] <- FALSE;
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,RunOptions=RunOptions,
+                               Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit,transfo=transfo)
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+cat(paste("SubCrit  ",OutputsCrit$SubCritNames,"  ",round(OutputsCrit$SubCritValues,4),"\\n",sep=""))
+
+
+
+
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateCalibOptions}}
+}
+
diff --git a/man/CreateInputsModel.Rd b/man/CreateInputsModel.Rd
new file mode 100644
index 00000000..3a2695d8
--- /dev/null
+++ b/man/CreateInputsModel.Rd
@@ -0,0 +1,89 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{CreateInputsModel}
+\alias{CreateInputsModel}
+\title{Creation of the InputsModel object required to the RunModel functions}
+\usage{
+CreateInputsModel(FUN_MOD, DatesR, Precip, PotEvap = NULL, TempMean = NULL,
+  TempMin = NULL, TempMax = NULL, ZInputs = NULL, HypsoData = NULL,
+  NLayers = 5, quiet = FALSE)
+}
+\arguments{
+\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}
+
+\item{DatesR}{[POSIXlt] vector of dates required to create the GR model and CemaNeige module inputs}
+
+\item{Precip}{[numeric] time series of daily total precipitation (catchment average) [mm], required to create the GR model and CemaNeige module inputs}
+
+\item{PotEvap}{[numeric] time series of daily potential evapotranspiration (catchment average) [mm], required to create the GR model inputs}
+
+\item{TempMean}{[numeric] time series of daily mean air temperature [degC], required to create the CemaNeige module inputs}
+
+\item{TempMin}{(optional) [numeric] time series of daily min air temperature [degC], possibly used to create the CemaNeige module inputs}
+
+\item{TempMax}{(optional) [numeric] time series of daily max air temperature [degC], possibly used to create the CemaNeige module inputs}
+
+\item{ZInputs}{(optional) [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]}
+
+\item{HypsoData}{(optional) [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m], required to create the GR model inputs, if not defined a single elevation is used for CemaNeige}
+
+\item{NLayers}{(optional) [numeric] integer giving the number of elevation layers requested [-], required to create the GR model inputs, default=5}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] object of class \emph{InputsModel} containing the data required to evaluate the model outputs; it can include the following:
+         \tabular{ll}{
+         \emph{$DatesR              }  \tab   [POSIXlt] vector of dates \cr
+         \emph{$Precip              }  \tab   [numeric] time series of daily total precipitation (catchment average) [mm] \cr
+         \emph{$PotEvap             }  \tab   [numeric] time series of daily potential evapotranspiration (catchment average) [mm], \cr\tab defined if FUN_MOD includes GR4J, GR5J or GR6J \cr \cr
+         \emph{$LayerPrecip         }  \tab   [list] list of time series of daily precipitation (layer average) [mm], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
+         \emph{$LayerTempMean       }  \tab   [list] list of time series of daily mean air temperature (layer average) [degC], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
+         \emph{$LayerFracSolidPrecip}  \tab   [list] list of time series of daily solid precip. fract. (layer average) [-], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr
+         }
+}
+\description{
+Creation of the InputsModel object required to the RunModel functions.
+}
+\details{
+Users wanting to use FUN_MOD functions that are not included in
+the package must create their own InputsModel object accordingly.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,
+                         FUN_MOD=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{RunModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}, \code{\link{DataAltiExtrapolation_HBAN}}
+}
+
diff --git a/man/CreateRunOptions.Rd b/man/CreateRunOptions.Rd
new file mode 100644
index 00000000..e4dd9216
--- /dev/null
+++ b/man/CreateRunOptions.Rd
@@ -0,0 +1,121 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{CreateRunOptions}
+\alias{CreateRunOptions}
+\title{Creation of the RunOptions object required to the RunModel functions}
+\usage{
+CreateRunOptions(FUN_MOD, InputsModel, IndPeriod_WarmUp = NULL, IndPeriod_Run,
+  IniStates = NULL, IniResLevels = NULL, Outputs_Cal = NULL,
+  Outputs_Sim = "all", RunSnowModule = TRUE, MeanAnSolidPrecip = NULL,
+  quiet = FALSE)
+}
+\arguments{
+\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}
+
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{IndPeriod_WarmUp}{(optional) [numeric] index of period to be used for the model warm-up [-]}
+
+\item{IndPeriod_Run}{[numeric] index of period to be used for the model run [-]}
+
+\item{IniStates}{(optional) [numeric] vector of initial model states [mm]}
+
+\item{IniResLevels}{(optional) [numeric] vector of initial filling rates for production and routing stores (2 values between 0 and 1) [-]}
+
+\item{Outputs_Cal}{(optional) [character] vector giving the outputs needed for the calibration \cr (e.g. c("Qsim")), the least outputs the fastest the calibration}
+
+\item{Outputs_Sim}{(optional) [character] vector giving the requested outputs \cr (e.g. c("DatesR","Qsim","SnowPack")), default="all"}
+
+\item{RunSnowModule}{(optional) [boolean] option indicating whether CemaNeige should be activated, default=TRUE}
+
+\item{MeanAnSolidPrecip}{(optional) [numeric] vector giving the annual mean of average solid precipitation for each layer (computed from InputsModel if not defined) [mm/y]}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] object of class \emph{RunOptions} containing the data required to evaluate the model outputs; it can include the following:
+         \tabular{ll}{
+         \emph{IndPeriod_WarmUp }  \tab  [numeric] index of period to be used for the model warm-up [-] \cr
+         \emph{IndPeriod_Run    }  \tab  [numeric] index of period to be used for the model run [-] \cr
+         \emph{IniStates        }  \tab  [numeric] vector of initial model states [mm] \cr
+         \emph{IniResLevels     }  \tab  [numeric] vector of initial filling rates for production and routing stores [-] \cr
+         \emph{Outputs_Cal      }  \tab  [character] character vector giving only the outputs needed for the calibration \cr
+         \emph{Outputs_Sim      }  \tab  [character] character vector giving the requested outputs \cr
+         \emph{RunSnowModule    }  \tab  [boolean] option indicating whether CemaNeige should be activated \cr
+         \emph{MeanAnSolidPrecip}  \tab  [numeric] vector giving the annual mean of average solid precipitation for each layer [mm/y] \cr
+         }
+}
+\description{
+Creation of the RunOptions object required to the RunModel functions.
+}
+\details{
+Users wanting to use FUN_MOD functions that are not included in
+the package must create their own RunOptions object accordingly.
+
+##### Initialisation options #####
+
+The model initialisation options can either be set to a default configuration or be defined by the user.
+
+This is done via three vectors: \cr \emph{IndPeriod_WarmUp}, \emph{IniStates}, \emph{IniResLevels}. \cr
+A default configuration is used for initialisation if these vectors are not defined.
+
+(1) Default initialisation options:
+
+\itemize{
+\item \emph{IndPeriod_WarmUp} default setting ensures a one-year warm-up using the time-steps preceding the \emph{IndPeriod_Run}.
+The actual length of this warm-up might be shorter depending on data availability (no missing value being allowed on model input series).
+
+\item \emph{IniStates} and \emph{IniResLevels} are automatically set to initialise all the model states at 0, except for the production and routing stores which are initialised at 50\% of their capacity. This initialisation is made at the very beginning of the model call (i.e. at the beginning of \emph{IndPeriod_WarmUp} or at the beginning of IndPeriod_Run if the warm-up period is disabled).
+}
+
+(2) Customisation of initialisation options:
+
+\itemize{
+\item \emph{IndPeriod_WarmUp} can be used to specify the indices of the warm-up period (within the time-series prepared in InputsModel). \cr
+- remark 1:	for most common cases, indices corresponding to one or several years preceding \emph{IndPeriod_Run} are used (e.g. \emph{IndPeriod_WarmUp <- 1000:1365} and \emph{IndPeriod_Run <- 1366:5000)}. \cr
+However, it is also possible to perform a long-term initialisation if other indices than the warm-up ones are set in \emph{IndPeriod_WarmUp} (e.g. \emph{IndPeriod_WarmUp <- c( 1:5000 , 1:5000 , 1:5000 ,1000:1365 )}). \cr
+- remark 2:	it is also possible to completely disable the warm-up period when using \emph{IndPeriod_WarmUp <- 0}.
+
+\item \emph{IniStates} and \emph{IniResLevels} can be used to specify the initial model states. \cr
+- remark 1:	if \emph{IniStates} is used, all model states must be provided (e.g. 60 floats [mm] are required for GR4J, GR5J and GR6J; 60+2*NLayers floats [mm] are required for CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J; see fortran source code for details). \cr
+- remark 2:	in addition to \emph{IniStates}, \emph{IniResLevels} allows to set the filling rate of the production and routing stores for the GR models. For instance for GR4J, GR5J and GR6J: \emph{IniResLevels <- c(0.3,0.5)} should be used to obtain initial fillings of 30\% and 50\% for the production and routing stores, respectively.  \emph{IniResLevels} is optional and can only be used if \emph{IniStates} is also defined (the state values corresponding to these two stores in \emph{IniStates} are not used in such case). \cr \cr
+}
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,
+                         FUN_MOD=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}
+}
+
diff --git a/man/DataAltiExtrapolation_HBAN.Rd b/man/DataAltiExtrapolation_HBAN.Rd
new file mode 100644
index 00000000..25a862f9
--- /dev/null
+++ b/man/DataAltiExtrapolation_HBAN.Rd
@@ -0,0 +1,64 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{DataAltiExtrapolation_HBAN}
+\alias{DataAltiExtrapolation_HBAN}
+\title{Altitudinal extrapolation of precipitation and temperature series}
+\usage{
+DataAltiExtrapolation_HBAN(DatesR, Precip, TempMean, TempMin = NULL,
+  TempMax = NULL, ZInputs, HypsoData, NLayers, quiet = FALSE)
+}
+\arguments{
+\item{DatesR}{[POSIXlt] vector of dates}
+
+\item{Precip}{[numeric] time series of daily total precipitation (catchment average) [mm]}
+
+\item{TempMean}{[numeric] time series of daily mean air temperature [degC]}
+
+\item{TempMin}{(optional) [numeric] time series of daily min air temperature [degC]}
+
+\item{TempMax}{(optional) [numeric] time series of daily max air temperature [degC]}
+
+\item{ZInputs}{[numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]}
+
+\item{HypsoData}{[numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m]}
+
+\item{NLayers}{[numeric] integer giving the number of elevation layers requested [-]}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+list containing the extrapolated series of precip. and air temp. on each elevation layer
+         \tabular{ll}{
+           \emph{$LayerPrecip         }  \tab  [list] list of time series of daily precipitation (layer average) [mm]           \cr
+           \emph{$LayerTempMean       }  \tab  [list] list of time series of daily mean air temperature (layer average) [degC]  \cr
+           \emph{$LayerTempMin        }  \tab  [list] list of time series of daily min air temperature (layer average) [degC]   \cr
+           \emph{$LayerTempMax        }  \tab  [list] list of time series of daily max air temperature (layer average) [degC]   \cr
+           \emph{$LayerFracSolidPrecip}  \tab  [list] list of time series of daily solid precip. fract. (layer average) [-]     \cr
+           \emph{$ZLayers             }  \tab  [numeric] vector of median elevation for each layer                              \cr
+         }
+}
+\description{
+Function which extrapolates the precipitation and air temperature series for different elevation layers (method from Valery, 2010).
+}
+\details{
+Elevation layers of equal surface are created the 101 elevation quantiles (\emph{HypsoData})
+and the number requested elevation layers (\emph{NLayers}). \cr
+Forcing data (precipitation and air temperature) are extrapolated using gradients from Valery (2010).
+(e.g. gradP=0.0004 [m-1] for France and gradT=0.434 [degreC/100m] for January, 1st). \cr
+This function is used by the \emph{CreateInputsModel} function. \cr
+}
+\author{
+Laurent Coron, Pierre Brigode (June 2014)
+}
+\references{
+Turcotte, R., L.-G. Fortin, V. Fortin, J.-P. Fortin and J.-P. Villeneuve (2007),
+      Operational analysis of the spatial distribution and the temporal evolution of the snowpack water equivalent
+      in southern Quebec, Canada, Nordic Hydrology, 38(3), 211, doi:10.2166/nh.2007.009. \cr
+  Valéry, A. (2010), Modélisation précipitations-débit sous influence nivale ? : Elaboration d'un module neige
+      et évaluation sur 380 bassins versants, PhD thesis (in french), AgroParisTech, Paris, France. \cr
+  USACE (1956), Snow Hydrology, pp. 437, U.S. Army Coprs of Engineers (USACE) North Pacific Division, Portland, Oregon, USA.
+}
+\seealso{
+\code{\link{CreateInputsModel}}, \code{\link{RunModel_CemaNeigeGR4J}}
+}
+
diff --git a/man/ErrorCrit.Rd b/man/ErrorCrit.Rd
new file mode 100644
index 00000000..18302692
--- /dev/null
+++ b/man/ErrorCrit.Rd
@@ -0,0 +1,92 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{ErrorCrit}
+\alias{ErrorCrit}
+\title{Error criterion using the provided function}
+\usage{
+ErrorCrit(InputsCrit, OutputsModel, FUN_CRIT, quiet = FALSE)
+}
+\arguments{
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details}
+
+\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] list containing the function outputs, see \code{\link{ErrorCrit_RMSE}} or \code{\link{ErrorCrit_NSE}} for details
+}
+\description{
+Function which computes an error criterion with the provided function.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J)
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Nash-Sutcliffe Efficiency on log-transformed flows
+transfo <- "log"
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],transfo=transfo)
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Nash-Sutcliffe Efficiency above a threshold (q75\%)
+BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); 
+BoolCrit[BasinObs$Qmm[Ind_Run]<quantile(BasinObs$Qmm[Ind_Run],0.75,na.rm=TRUE)] <- FALSE;
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit)
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+cat(paste("SubCrit  ",OutputsCrit$SubCritNames,"  ",round(OutputsCrit$SubCritValues,4),"\\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency below a threshold (q10\%) on log-trqansformed flows
+transfo  <- "log"
+BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); 
+BoolCrit[BasinObs$Qmm[Ind_Run]>quantile(BasinObs$Qmm[Ind_Run],0.10,na.rm=TRUE)] <- FALSE;
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,RunOptions=RunOptions,
+                               Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit,transfo=transfo)
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+cat(paste("SubCrit  ",OutputsCrit$SubCritNames,"  ",round(OutputsCrit$SubCritValues,4),"\\n",sep=""))
+
+
+
+
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}
+}
+
diff --git a/man/ErrorCrit_KGE.Rd b/man/ErrorCrit_KGE.Rd
new file mode 100644
index 00000000..5b71c61a
--- /dev/null
+++ b/man/ErrorCrit_KGE.Rd
@@ -0,0 +1,50 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{ErrorCrit_KGE}
+\alias{ErrorCrit_KGE}
+\title{Error criterion based on the KGE formula}
+\usage{
+ErrorCrit_KGE(InputsCrit, OutputsModel, quiet = FALSE)
+}
+\arguments{
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+         \emph{$CritName       }   \tab   [character] name of the criterion \cr
+         \emph{$SubCritValues  }   \tab   [numeric] values of the sub-criteria \cr
+         \emph{$SubCritNames   }   \tab   [character] names of the sub-criteria \cr
+         \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+         \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+         \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+         }
+}
+\description{
+Function which computes an error criterion based on the KGE formula proposed by Gupta et al. (2009).
+}
+\details{
+In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows
+the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised
+(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+}
+\examples{
+## see example of the ErrorCrit function
+}
+\author{
+Laurent Coron (June 2014)
+}
+\references{
+Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009),
+      Decomposition of the mean squared error and NSE performance criteria: Implications
+      for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr
+}
+\seealso{
+\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE2}}
+}
+
diff --git a/man/ErrorCrit_KGE2.Rd b/man/ErrorCrit_KGE2.Rd
new file mode 100644
index 00000000..aa6e12ae
--- /dev/null
+++ b/man/ErrorCrit_KGE2.Rd
@@ -0,0 +1,53 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{ErrorCrit_KGE2}
+\alias{ErrorCrit_KGE2}
+\title{Error criterion based on the KGE' formula}
+\usage{
+ErrorCrit_KGE2(InputsCrit, OutputsModel, quiet = FALSE)
+}
+\arguments{
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+         \emph{$CritName       }   \tab   [character] name of the criterion \cr
+         \emph{$SubCritValues  }   \tab   [numeric] values of the sub-criteria \cr
+         \emph{$SubCritNames   }   \tab   [character] names of the sub-criteria \cr
+         \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+         \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+         \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+         }
+}
+\description{
+Function which computes an error criterion based on the KGE' formula proposed by Kling et al. (2012).
+}
+\details{
+In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows
+the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised
+(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+}
+\examples{
+## see example of the ErrorCrit function
+}
+\author{
+Laurent Coron (June 2014)
+}
+\references{
+Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009),
+      Decomposition of the mean squared error and NSE performance criteria: Implications
+      for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr
+  Kling, H., Fuchs, M. and Paulin, M. (2012),
+      Runoff conditions in the upper Danube basin under an ensemble of climate change scenarios,
+      Journal of Hydrology, 424-425, 264-277, doi:10.1016/j.jhydrol.2012.01.011.
+}
+\seealso{
+\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}
+}
+
diff --git a/man/ErrorCrit_NSE.Rd b/man/ErrorCrit_NSE.Rd
new file mode 100644
index 00000000..112f39c3
--- /dev/null
+++ b/man/ErrorCrit_NSE.Rd
@@ -0,0 +1,48 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{ErrorCrit_NSE}
+\alias{ErrorCrit_NSE}
+\title{Error criterion based on the NSE formula}
+\usage{
+ErrorCrit_NSE(InputsCrit, OutputsModel, quiet = FALSE)
+}
+\arguments{
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+         \emph{$CritName       }   \tab   [character] name of the criterion \cr
+         \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+         \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+         \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+         }
+}
+\description{
+Function which computes an error criterion based on the NSE formula proposed by Nash & Sutcliffe (1970).
+}
+\details{
+In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows
+the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised
+(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+}
+\examples{
+## see example of the ErrorCrit function
+}
+\author{
+Laurent Coron (June 2014)
+}
+\references{
+Nash, J.E. and Sutcliffe, J.V. (1970),
+      River flow forecasting through conceptual models part 1.
+      A discussion of principles, Journal of Hydrology, 10(3), 282-290, doi:10.1016/0022-1694(70)90255-6. \cr
+}
+\seealso{
+\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}}
+}
+
diff --git a/man/ErrorCrit_RMSE.Rd b/man/ErrorCrit_RMSE.Rd
new file mode 100644
index 00000000..be78dafc
--- /dev/null
+++ b/man/ErrorCrit_RMSE.Rd
@@ -0,0 +1,43 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{ErrorCrit_RMSE}
+\alias{ErrorCrit_RMSE}
+\title{Error criterion based on the RMSE}
+\usage{
+ErrorCrit_RMSE(InputsCrit, OutputsModel, quiet = FALSE)
+}
+\arguments{
+\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details}
+
+\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$CritValue      }   \tab   [numeric] value of the criterion \cr
+         \emph{$CritName       }   \tab   [character] name of the criterion \cr
+         \emph{$CritBestValue  }   \tab   [numeric] theoretical best criterion value \cr
+         \emph{$Multiplier     }   \tab   [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr
+         \emph{$Ind_notcomputed}   \tab   [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr
+         }
+}
+\description{
+Function which computes an error criterion based on the root mean square error (RMSE).
+}
+\details{
+In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows
+the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised
+(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE).
+}
+\examples{
+## see example of the ErrorCrit function
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}}
+}
+
diff --git a/man/PEdaily_Oudin.Rd b/man/PEdaily_Oudin.Rd
new file mode 100644
index 00000000..c310f515
--- /dev/null
+++ b/man/PEdaily_Oudin.Rd
@@ -0,0 +1,36 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{PEdaily_Oudin}
+\alias{PEdaily_Oudin}
+\title{Computation of daily series of potential evapotranspiration with Oudin's formula}
+\usage{
+PEdaily_Oudin(JD, Temp, LatRad)
+}
+\arguments{
+\item{JD}{[numeric] time series of julian day [-]}
+
+\item{Temp}{[numeric] time series of daily mean air temperature [degC]}
+
+\item{LatRad}{[numeric] latitude of measurement for the temperature series [rad]}
+}
+\value{
+[numeric] time series of daily potential evapotranspiration [mm/d]
+}
+\description{
+Function which computes daily PE using the formula from Oudin et al. (2005).
+}
+\examples{
+require(airGR)
+   data(L0123001)
+   PotEvap <- PEdaily_Oudin(JD=as.POSIXlt(BasinObs$DatesR)$yday,Temp=BasinObs$T,LatRad=0.8)
+}
+\author{
+Laurent Coron (December 2013)
+}
+\references{
+Oudin, L., F. Hervieu, C. Michel, C. Perrin, V. Andréassian, F. Anctil and C. Loumagne (2005),
+      Which potential evapotranspiration input for a lumped rainfall-runoff model?: Part 2-Towards a
+      simple and efficient potential evapotranspiration model for rainfall-runoff modelling, Journal of Hydrology,
+      303(1-4), 290-306, doi:10.1016/j.jhydrol.2004.08.026.
+}
+
diff --git a/man/RunModel.Rd b/man/RunModel.Rd
new file mode 100644
index 00000000..cd7a4af6
--- /dev/null
+++ b/man/RunModel.Rd
@@ -0,0 +1,61 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel}
+\alias{RunModel}
+\title{Run with the provided hydrological model function}
+\usage{
+RunModel(InputsModel, RunOptions, Param, FUN_MOD)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of model parameters}
+
+\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)}
+}
+\value{
+[list] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details
+}
+\description{
+Function which performs a single model run with the provided function.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,
+                         FUN_MOD=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{RunModel_GR4J}}, \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/RunModel_CemaNeige.Rd b/man/RunModel_CemaNeige.Rd
new file mode 100644
index 00000000..8191c8f6
--- /dev/null
+++ b/man/RunModel_CemaNeige.Rd
@@ -0,0 +1,84 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel_CemaNeige}
+\alias{RunModel_CemaNeige}
+\title{Run with the CemaNeige snow module}
+\usage{
+RunModel_CemaNeige(InputsModel, RunOptions, Param)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of 2 parameters
+\tabular{ll}{
+CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+}}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$DatesR  }                                  \tab [POSIXlt] series of dates                                    \cr
+         \emph{$CemaNeigeLayers}                           \tab [list] list of CemaNeige outputs (1 list per layer)          \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                    \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                     \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                           \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]           \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                             \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm]                 \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm]                    \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm]   \cr
+         \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: CemaNeige states [mm & degC] \cr
+         }
+         (refer to the provided references or to the package source code for further details on these model outputs)
+}
+\description{
+Function which performs a single model run for RunModel_CemaNeige.
+}
+\details{
+For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeige,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,TempMean=BasinObs$T,
+                                 ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve,
+                                 NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeige,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(0.962,2.249)
+OutputsModel <- RunModel_CemaNeige(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel)
+
+}
+\author{
+Laurent Coron (January 2014)
+}
+\references{
+Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine?
+      Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+  Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine?
+      Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+}
+\seealso{
+\code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/RunModel_CemaNeigeGR4J.Rd b/man/RunModel_CemaNeigeGR4J.Rd
new file mode 100644
index 00000000..6ad6de2b
--- /dev/null
+++ b/man/RunModel_CemaNeigeGR4J.Rd
@@ -0,0 +1,112 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel_CemaNeigeGR4J}
+\alias{RunModel_CemaNeigeGR4J}
+\title{Run with the CemaNeigeGR4J hydrological model}
+\usage{
+RunModel_CemaNeigeGR4J(InputsModel, RunOptions, Param)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of 6 parameters
+\tabular{ll}{
+GR4J X1      \tab production store capacity [mm]                                \cr
+GR4J X2      \tab intercatchment exchange coefficient [mm/d]                    \cr
+GR4J X3      \tab routing store capacity [mm]                                   \cr
+GR4J X4      \tab unit hydrograph time constant [d]                             \cr
+CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+}}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+         \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+         \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+         \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+         \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+         \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+         \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+         \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+         \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+         \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+         \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+         \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+         \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+         \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+         \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+         \emph{$CemaNeigeLayers}   \tab [list] list of CemaNeige outputs (1 list per layer)                          \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                          \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                           \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                                 \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]                 \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                                   \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm/d]                     \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm/d]                        \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm/d]       \cr
+         \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr
+         }
+         (refer to the provided references or to the package source code for further details on these model outputs)
+}
+\description{
+Function which performs a single model run for RunModel_CemaNeigeGR4J.
+}
+\details{
+For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T,
+                                 ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve,
+                                 NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR4J,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(408.774,2.646,131.264,1.174,0.962,2.249)
+OutputsModel <- RunModel_CemaNeigeGR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (December 2013)
+}
+\references{
+Perrin, C., C. Michel and V. Andréassian (2003),
+      Improvement of a parsimonious model for streamflow simulation,
+      Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7.
+  Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine?
+      Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+  Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine?
+      Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+}
+\seealso{
+\code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR4J}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/RunModel_CemaNeigeGR5J.Rd b/man/RunModel_CemaNeigeGR5J.Rd
new file mode 100644
index 00000000..3048e77e
--- /dev/null
+++ b/man/RunModel_CemaNeigeGR5J.Rd
@@ -0,0 +1,115 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel_CemaNeigeGR5J}
+\alias{RunModel_CemaNeigeGR5J}
+\title{Run with the CemaNeigeGR5J hydrological model}
+\usage{
+RunModel_CemaNeigeGR5J(InputsModel, RunOptions, Param)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of 7 parameters
+\tabular{ll}{
+GR5J X1      \tab production store capacity [mm]                                \cr
+GR5J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+GR5J X3      \tab routing store capacity [mm]                                   \cr
+GR5J X4      \tab unit hydrograph time constant [d]                             \cr
+GR5J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+}}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+         \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+         \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+         \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+         \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+         \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+         \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+         \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+         \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+         \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+         \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+         \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+         \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+         \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+         \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+         \emph{$CemaNeigeLayers}   \tab [list] list of CemaNeige outputs (1 list per layer)                          \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                          \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                           \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                                 \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]                 \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                                   \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm/d]                     \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm/d]                        \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm/d]       \cr
+         \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr
+         }
+         (refer to the provided references or to the package source code for further details on these model outputs)
+}
+\description{
+Function which performs a single model run for RunModel_CemaNeigeGR5J.
+}
+\details{
+For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR5J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T,
+                                 ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve,
+                                 NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR5J,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(179.139,-0.100,203.815,1.174,2.478,0.977,2.774)
+OutputsModel <- RunModel_CemaNeigeGR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (December 2013)
+}
+\references{
+Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances
+      et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr
+  Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011),
+      A downward structural sensitivity analysis of hydrological models to improve low-flow simulation,
+      Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+  Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine?
+      Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+  Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine?
+      Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+}
+\seealso{
+\code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR5J}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/RunModel_CemaNeigeGR6J.Rd b/man/RunModel_CemaNeigeGR6J.Rd
new file mode 100644
index 00000000..57dfe775
--- /dev/null
+++ b/man/RunModel_CemaNeigeGR6J.Rd
@@ -0,0 +1,83 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel_CemaNeigeGR6J}
+\alias{RunModel_CemaNeigeGR6J}
+\title{Run with the CemaNeigeGR6J hydrological model}
+\usage{
+RunModel_CemaNeigeGR6J(InputsModel, RunOptions, Param)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of 8 parameters
+\tabular{ll}{
+GR6J X1      \tab production store capacity [mm]                                \cr
+GR6J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+GR6J X3      \tab routing store capacity [mm]                                   \cr
+GR6J X4      \tab unit hydrograph time constant [d]                             \cr
+GR6J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+GR6J X6      \tab coefficient for emptying exponential store [-]                \cr
+CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-]         \cr
+CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d]                       \cr
+}}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+         \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+         \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+         \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+         \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+         \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+         \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+         \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+         \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+         \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+         \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+         \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+         \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+         \emph{$QR1     }          \tab [numeric] series of exponential store outflow (QR1) [mm/d]                    \cr
+         \emph{$Exp     }          \tab [numeric] series of exponential store level (X(6)) (negative) [mm]            \cr
+         \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+         \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+         \emph{$CemaNeigeLayers}   \tab [list] list of CemaNeige outputs (1 list per layer)                          \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Pliq         }   \tab [numeric] series of liquid precip. [mm/d]                          \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Psol         }   \tab [numeric] series of solid precip. [mm/d]                           \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$SnowPack     }   \tab [numeric] series of snow pack [mm]                                 \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$ThermalState }   \tab [numeric] series of snow pack thermal state [degC]                 \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Gratio       }   \tab [numeric] series of Gratio [0-1]                                   \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PotMelt      }   \tab [numeric] series of potential snow melt [mm/d]                     \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$Melt         }   \tab [numeric] series of actual snow melt [mm/d]                        \cr
+         \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt  }   \tab [numeric] series of liquid precip. + actual snow melt [mm/d]       \cr
+         \emph{$StateEnd}                                  \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr
+         }
+         (refer to the provided references or to the package source code for further details on these model outputs)
+}
+\description{
+Function which performs a single model run for RunModel_CemaNeigeGR6J.
+}
+\details{
+For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+}
+\author{
+Laurent Coron (December 2013)
+}
+\references{
+Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011),
+      A downward structural sensitivity analysis of hydrological models to improve low-flow simulation,
+      Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+  Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine?
+      Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr
+  Valéry, A., V. Andréassian and C. Perrin (2014),
+      "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine?
+      Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058.
+}
+\seealso{
+\code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_GR6J}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/RunModel_GR4J.Rd b/man/RunModel_GR4J.Rd
new file mode 100644
index 00000000..db4f1c4a
--- /dev/null
+++ b/man/RunModel_GR4J.Rd
@@ -0,0 +1,92 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel_GR4J}
+\alias{RunModel_GR4J}
+\title{Run with the GR4J hydrological model}
+\usage{
+RunModel_GR4J(InputsModel, RunOptions, Param)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of 4 parameters
+\tabular{ll}{
+GR4J X1      \tab production store capacity [mm]                                \cr
+GR4J X2      \tab intercatchment exchange coefficient [mm/d]                    \cr
+GR4J X3      \tab routing store capacity [mm]                                   \cr
+GR4J X4      \tab unit hydrograph time constant [d]                             \cr
+}}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+         \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+         \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+         \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+         \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+         \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+         \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+         \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+         \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+         \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+         \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+         \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+         \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+         \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+         \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+         \emph{$StateEnd}          \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr
+         }
+         (refer to the provided references or to the package source code for further details on these model outputs)
+}
+\description{
+Function which performs a single model run for GR4J.
+}
+\details{
+For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (December 2013)
+}
+\references{
+Perrin, C., C. Michel and V. Andréassian (2003),
+      Improvement of a parsimonious model for streamflow simulation,
+      Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7.
+}
+\seealso{
+\code{\link{RunModel_GR5J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR4J}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/RunModel_GR5J.Rd b/man/RunModel_GR5J.Rd
new file mode 100644
index 00000000..4d7a911f
--- /dev/null
+++ b/man/RunModel_GR5J.Rd
@@ -0,0 +1,95 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel_GR5J}
+\alias{RunModel_GR5J}
+\title{Run with the GR5J hydrological model}
+\usage{
+RunModel_GR5J(InputsModel, RunOptions, Param)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of 5 parameters
+\tabular{ll}{
+GR5J X1      \tab production store capacity [mm]                                \cr
+GR5J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+GR5J X3      \tab routing store capacity [mm]                                   \cr
+GR5J X4      \tab unit hydrograph time constant [d]                             \cr
+GR5J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+}}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+         \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+         \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+         \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+         \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+         \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+         \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+         \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+         \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+         \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+         \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+         \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+         \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+         \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+         \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+         \emph{$StateEnd}          \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr
+         }
+         (refer to the provided references or to the package source code for further details on these model outputs)
+}
+\description{
+Function which performs a single model run for GR5J.
+}
+\details{
+For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR5J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR5J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(839.661,-0.100,103.153,1.939,-0.428)
+OutputsModel <- RunModel_GR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (December 2013)
+}
+\references{
+Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances
+      et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr
+  Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet, and V. Andréassian (2011),
+      A downward structural sensitivity analysis of hydrological models to improve low-flow simulation,
+      Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+}
+\seealso{
+\code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR5J}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/RunModel_GR6J.Rd b/man/RunModel_GR6J.Rd
new file mode 100644
index 00000000..6d95ee89
--- /dev/null
+++ b/man/RunModel_GR6J.Rd
@@ -0,0 +1,96 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{RunModel_GR6J}
+\alias{RunModel_GR6J}
+\title{Run with the GR6J hydrological model}
+\usage{
+RunModel_GR6J(InputsModel, RunOptions, Param)
+}
+\arguments{
+\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details}
+
+\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details}
+
+\item{Param}{[numeric] vector of 6 parameters
+\tabular{ll}{
+GR6J X1      \tab production store capacity [mm]                                \cr
+GR6J X2      \tab intercatchment exchange coefficient 1 [mm/d]                  \cr
+GR6J X3      \tab routing store capacity [mm]                                   \cr
+GR6J X4      \tab unit hydrograph time constant [d]                             \cr
+GR6J X5      \tab intercatchment exchange coefficient 2 [-]                     \cr
+GR6J X6      \tab coefficient for emptying exponential store [-]                \cr
+}}
+}
+\value{
+[list] list containing the function outputs organised as follows:
+         \tabular{ll}{
+         \emph{$DatesR  }          \tab [POSIXlt] series of dates                                                     \cr
+         \emph{$PotEvap }          \tab [numeric] series of input potential evapotranspiration [mm/d]                 \cr
+         \emph{$Precip  }          \tab [numeric] series of input total precipitation [mm/d]                          \cr
+         \emph{$Prod    }          \tab [numeric] series of production store level (X(2)) [mm]                        \cr
+         \emph{$AE      }          \tab [numeric] series of actual evapotranspiration [mm/d]                          \cr
+         \emph{$Perc    }          \tab [numeric] series of percolation (PERC) [mm/d]                                 \cr
+         \emph{$PR      }          \tab [numeric] series of PR=PN-PS+PERC [mm/d]                                      \cr
+         \emph{$Q9      }          \tab [numeric] series of HU1 outflow (Q9) [mm/d]                                   \cr
+         \emph{$Q1      }          \tab [numeric] series of HU2 outflow (Q1) [mm/d]                                   \cr
+         \emph{$Rout    }          \tab [numeric] series of routing store level (X(1)) [mm]                           \cr
+         \emph{$Exch    }          \tab [numeric] series of potential semi-exchange between catchments [mm/d]         \cr
+         \emph{$AExch   }          \tab [numeric] series of actual exchange between catchments (1+2) [mm/d]           \cr
+         \emph{$QR      }          \tab [numeric] series of routing store outflow (QR) [mm/d]                         \cr
+         \emph{$QR1     }          \tab [numeric] series of exponential store outflow (QR1) [mm/d]                    \cr
+         \emph{$Exp     }          \tab [numeric] series of exponential store level (X(6)) (negative) [mm]            \cr
+         \emph{$QD      }          \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d]           \cr
+         \emph{$Qsim    }          \tab [numeric] series of Qsim [mm/d]                                               \cr
+         \emph{$StateEnd}          \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr
+         }
+         (refer to the provided references or to the package source code for further details on these model outputs)
+}
+\description{
+Function which performs a single model run for GR6J.
+}
+\details{
+For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}.
+}
+\examples{
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR6J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR6J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(347.000,-0.500,65.677,1.957,0.324,34.115)
+OutputsModel <- RunModel_GR6J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\\n",sep=""))
+
+}
+\author{
+Laurent Coron (December 2013)
+}
+\references{
+Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011),
+      A downward structural sensitivity analysis of hydrological models to improve low-flow simulation,
+      Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+}
+\seealso{
+\code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR5J}}, \code{\link{RunModel_CemaNeigeGR6J}},
+         \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}.
+}
+
diff --git a/man/TransfoParam.Rd b/man/TransfoParam.Rd
new file mode 100644
index 00000000..a23d4b9c
--- /dev/null
+++ b/man/TransfoParam.Rd
@@ -0,0 +1,45 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{TransfoParam}
+\alias{TransfoParam}
+\title{Transformation of the parameters using the provided function}
+\usage{
+TransfoParam(ParamIn, Direction, FUN_TRANSFO)
+}
+\arguments{
+\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)}
+
+\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real}
+
+\item{FUN_TRANSFO}{[function] model parameters transformation function (e.g. TransfoParam_GR4J, TransfoParam_CemaNeigeGR4J)}
+}
+\value{
+\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+}
+\description{
+Function which transforms model parameters (from real to transformed parameters and vice versa) using the provided function.
+}
+\examples{
+require(airGR)
+
+## transformation Real->Transformed for the GR4J model
+    Xreal <- matrix( c( 221.41, -3.63,  30.00, 1.37,
+                        347.23, -1.03,  60.34, 1.76,
+                        854.06, -0.10, 148.41, 2.34),
+                        ncol=4,byrow=TRUE)
+    Xtran <- TransfoParam(ParamIn=Xreal,Direction="RT",FUN_TRANSFO=TransfoParam_GR4J)
+
+## transformation Transformed->Real for the GR4J model
+    Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10,
+                        +3.90, -0.90, +4.10, -8.70,
+                        +4.50, -0.10, +5.00, -8.10),
+                        ncol=4,byrow=TRUE)
+    Xreal <- TransfoParam(ParamIn=Xtran,Direction="TR",FUN_TRANSFO=TransfoParam_GR4J)
+}
+\author{
+Laurent Coron (June 2014)
+}
+\seealso{
+\code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}}
+}
+
diff --git a/man/TransfoParam_CemaNeige.Rd b/man/TransfoParam_CemaNeige.Rd
new file mode 100644
index 00000000..0a34e224
--- /dev/null
+++ b/man/TransfoParam_CemaNeige.Rd
@@ -0,0 +1,43 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{TransfoParam_CemaNeige}
+\alias{TransfoParam_CemaNeige}
+\title{Transformation of the parameters from the CemaNeige module}
+\usage{
+TransfoParam_CemaNeige(ParamIn, Direction)
+}
+\arguments{
+\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)}
+
+\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real}
+}
+\value{
+\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+}
+\description{
+Function which transforms model parameters (from real to transformed parameters and vice versa).
+}
+\examples{
+require(airGR)
+
+## transformation Real->Transformed for the CemaNeige module
+    Xreal <- matrix( c( 0.19, 1.73,
+                        0.39, 2.51,
+                        0.74, 4.06),
+                        ncol=2,byrow=TRUE)
+    Xtran <- TransfoParam_CemaNeige(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the CemaNeige module
+    Xtran <- matrix( c( -6.26, +0.55,
+                        -2.13, +0.92,
+                        +4.86, +1.40)
+                        ,ncol=2,byrow=TRUE)
+    Xreal <- TransfoParam_CemaNeige(ParamIn=Xtran,Direction="TR")
+}
+\author{
+Laurent Coron (December 2013)
+}
+\seealso{
+\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}
+}
+
diff --git a/man/TransfoParam_GR4J.Rd b/man/TransfoParam_GR4J.Rd
new file mode 100644
index 00000000..bafd6e24
--- /dev/null
+++ b/man/TransfoParam_GR4J.Rd
@@ -0,0 +1,43 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{TransfoParam_GR4J}
+\alias{TransfoParam_GR4J}
+\title{Transformation of the parameters from the GR4J model}
+\usage{
+TransfoParam_GR4J(ParamIn, Direction)
+}
+\arguments{
+\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)}
+
+\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real}
+}
+\value{
+\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+}
+\description{
+Function which transforms model parameters (from real to transformed parameters and vice versa).
+}
+\examples{
+require(airGR)
+
+## transformation Real->Transformed for the GR4J model
+    Xreal <- matrix( c( 221.41, -3.63,  30.00, 1.37,
+                        347.23, -1.03,  60.34, 1.76,
+                        854.06, -0.10, 148.41, 2.34),
+                        ncol=4,byrow=TRUE)
+    Xtran <- TransfoParam_GR4J(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the GR4J model
+    Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10,
+                        +3.90, -0.90, +4.10, -8.70,
+                        +4.50, -0.10, +5.00, -8.10),
+                        ncol=4,byrow=TRUE)
+    Xreal <- TransfoParam_GR4J(ParamIn=Xtran,Direction="TR")
+}
+\author{
+Laurent Coron (December 2013)
+}
+\seealso{
+\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}}
+}
+
diff --git a/man/TransfoParam_GR5J.Rd b/man/TransfoParam_GR5J.Rd
new file mode 100644
index 00000000..61a273dc
--- /dev/null
+++ b/man/TransfoParam_GR5J.Rd
@@ -0,0 +1,43 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{TransfoParam_GR5J}
+\alias{TransfoParam_GR5J}
+\title{Transformation of the parameters from the GR5J model}
+\usage{
+TransfoParam_GR5J(ParamIn, Direction)
+}
+\arguments{
+\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)}
+
+\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real}
+}
+\value{
+\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+}
+\description{
+Function which transforms model parameters (from real to transformed parameters and vice versa).
+}
+\examples{
+require(airGR)
+
+## transformation Real->Transformed for the GR5J model
+    Xreal <- matrix( c( 221.41, -2.65,  27.11, 1.37, -0.76,
+                        347.23, -0.64,  60.34, 1.76,  0.30,
+                        854.01, -0.10, 148.41, 2.34,  0.52),
+                        ncol=5,byrow=TRUE)
+    Xtran <- TransfoParam_GR5J(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the GR5J model
+    Xtran <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70,
+                        +3.90, -0.60, +4.10, -8.70, +0.30,
+                        +4.50, -0.10, +5.00, -8.10, +0.50),
+                        ncol=5,byrow=TRUE)
+    Xreal <- TransfoParam_GR5J(ParamIn=Xtran,Direction="TR")
+}
+\author{
+Laurent Coron (December 2013)
+}
+\seealso{
+\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}}
+}
+
diff --git a/man/TransfoParam_GR6J.Rd b/man/TransfoParam_GR6J.Rd
new file mode 100644
index 00000000..84faccba
--- /dev/null
+++ b/man/TransfoParam_GR6J.Rd
@@ -0,0 +1,43 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{TransfoParam_GR6J}
+\alias{TransfoParam_GR6J}
+\title{Transformation of the parameters from the GR6J model}
+\usage{
+TransfoParam_GR6J(ParamIn, Direction)
+}
+\arguments{
+\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)}
+
+\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real}
+}
+\value{
+\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column)
+}
+\description{
+Function which transforms model parameters (from real to transformed parameters and vice versa).
+}
+\examples{
+require(airGR)
+
+## transformation Real->Transformed for the GR6J model
+    Xreal <- matrix( c( 221.41, -1.18,  27.11, 1.37, -0.18,  20.09,
+                        347.23, -0.52,  60.34, 1.76,  0.02,  54.60,
+                        854.06,  0.52, 148.41, 2.34,  0.22, 148.41),
+                        ncol=6,byrow=TRUE)
+    Xtran <- TransfoParam_GR6J(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the GR6J model
+    Xtran <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00,
+                        +3.90, -0.50, +4.10, -8.70, +0.10, +4.00,
+                        +4.50, +0.50, +5.00, -8.10, +1.10, +5.00),
+                        ncol=6,byrow=TRUE)
+    Xreal <- TransfoParam_GR6J(ParamIn=Xtran,Direction="TR")
+}
+\author{
+Laurent Coron (December 2013)
+}
+\seealso{
+\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_CemaNeige}}
+}
+
diff --git a/man/airGR.Rd b/man/airGR.Rd
new file mode 100644
index 00000000..25802ba9
--- /dev/null
+++ b/man/airGR.Rd
@@ -0,0 +1,53 @@
+\name{airGR}
+\alias{airGR}
+\docType{package}
+\encoding{UTF-8}
+\title{Modelling tools used at Irstea-HBAN (France), including GR4J, GR5J, GR6J and CemaNeige}
+\description{
+This package brings into R the hydrological modelling tools used at Irstea-HBAN (France), including GR4J, GR5J, GR6J and CemaNeige. Each model core is coded in FORTRAN to ensure low computational time. The other package functions (i.e. mainly the calibration algorithm and the efficiency criteria) are coded in R. \cr
+
+##### Functions and objects #####
+
+The airGR package has been designed to fulfil two major requirements: facilitate the use by non-expert users and allow flexibility regarding the addition of external criteria, models or calibration algorithms. The names of the functions and their arguments were chosen to this end. 
+
+The package is mostly based on three families of functions: \cr
+- the functions belonging to the \code{\link{RunModel}} family require three arguments: \emph{InputsModel}, \emph{RunOptions} and \emph{Param};  please refer to help pages \code{\link{CreateInputsModel}} and \code{\link{CreateRunOptions}} for further details and examples; \cr
+- the functions belonging to the \code{\link{ErrorCrit}} family require two arguments: \emph{InputsCrit} and \emph{OutputsModel}; please refer to help pages \code{\link{CreateInputsCrit}} and \code{\link{RunModel}} for further details and examples; \cr
+- the functions belonging to the \code{\link{Calibration}} family require four arguments: \emph{InputsModel}, \emph{RunOptions}, \emph{InputsCrit} and \emph{CalibOptions};  please refer to help pages \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}} and \code{\link{CreateCalibOptions}} for further details and examples.
+
+In order to limit the risk of misuse and increase the flexibility of these main functions, we imposed the structure of their arguments and defined their class. Most users will not need to worry about these imposed structures since functions are provided to prepare these arguments for them: \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. However, advanced users wishing to supplement the package with their own models will need to comply with these imposed structures and refer to the package source codes to get all the specification requirements. \cr
+
+##### Models #####
+
+Three hydrological models and one snow melt and accumulation module are implemented in airGR. The snow module can also be used alone and each hydrological model can either be used alone or together with the snow module. \cr
+These models can be called within airGR using the following functions: \cr 
+- \code{\link{RunModel_GR4J}}: the four-parameter lumped conceptual model (Perrin et al., 2003) \cr
+- \code{\link{RunModel_GR5J}}: the five-parameter lumped conceptual model (Le Moine, 2008) \cr
+- \code{\link{RunModel_GR6J}}: the six-parameter lumped conceptual model (Pushpalatha, 2013) \cr
+- \code{\link{RunModel_CemaNeige}}: the two-parameter degree-day snow melt and accumulation module (Valéry et al., 2014) \cr
+- \code{\link{RunModel_CemaNeigeGR4J}}: combined use of GR4J and CemaNeige \cr
+- \code{\link{RunModel_CemaNeigeGR5J}}: combined use of GR5J and CemaNeige \cr
+- \code{\link{RunModel_CemaNeigeGR6J}}: combined use of GR6J and CemaNeige
+ 
+\emph{References:}  \cr
+Perrin, C., C. Michel and V. Andréassian (2003), Improvement of a parsimonious model for streamflow simulation, Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7. \cr
+Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances et du réalisme des modèles pluie-débit ?, PhD thesis (in French), UPMC, Paris, France. \cr
+Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr
+Valéry, A., V. Andréassian and C. Perrin (2014), "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. \cr
+}
+
+\details{
+\tabular{ll}{
+Package: \tab airGR\cr
+Type: \tab Package\cr
+Version: \tab 0.7.4\cr
+Date: \tab 2014-11-01\cr
+License: \tab GPL-2\cr
+}
+}
+\author{
+Author: Laurent CORON \cr
+Maintainer: Laurent CORON <laurent.coron@irstea.fr>, Olivier DELAIGUE <olivier.delaigue@irstea.fr>
+}
+
+\keyword{package, hydrology, modelling}
diff --git a/man/plot_OutputsModel.Rd b/man/plot_OutputsModel.Rd
new file mode 100644
index 00000000..fa219705
--- /dev/null
+++ b/man/plot_OutputsModel.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2 (4.0.1): do not edit by hand
+\encoding{UTF-8}
+\name{plot_OutputsModel}
+\alias{plot_OutputsModel}
+\title{Default preview of model outputs}
+\usage{
+plot_OutputsModel(OutputsModel, Qobs = NULL, IndPeriod_Plot = NULL,
+  BasinArea = NULL, quiet = FALSE)
+}
+\arguments{
+\item{OutputsModel}{[object of class \emph{OutputsModel}] list of model outputs (which must at least include DatesR, Precip and Qsim) [POSIXlt, mm, mm]}
+
+\item{Qobs}{(optional) [numeric] time series of observed flow (for the same time-steps than simulated) [mm]}
+
+\item{IndPeriod_Plot}{(optional) [numeric] indices of the time-steps to be plotted (among the OutputsModel series)}
+
+\item{BasinArea}{(optional) [numeric] basin area [km2], used to plot flow axes in m3/s}
+
+\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE}
+}
+\value{
+screen plot window
+}
+\description{
+Function which creates a screen plot giving an overview of the model outputs
+}
+\details{
+Dashboard of results including various graphs (depending on the model):
+(1) time series of total precipitation and simulated flows (and observed flows if provided)
+(2) interannual median monthly simulated flow (and observed flows if provided)
+(3) correlation plot between simulated and observed flows (if observed flows provided)
+(4) cumulative frequency plot for simulated flows (and observed flows if provided)
+}
+\author{
+Laurent Coron (June 2014)
+}
+
diff --git a/libs/i386/airGR.dll b/src-i386/airGR.dll
similarity index 98%
rename from libs/i386/airGR.dll
rename to src-i386/airGR.dll
index 961f06dad7a1894bc10c11438a71ee02359a969e..088dfd4622dcf6e4806433dd2f736867c047c589 100644
GIT binary patch
delta 31
lcmZqJ!`QHgaY6_4?rB{UyM398w`{zn<qP6%X7~Ha4*=jE4f6m1

delta 31
lcmZqJ!`QHgaY6@k>EDux-M&nF8aLk3@&)lWv-|zz2LR%44j%vj

diff --git a/src-i386/frun_CEMANEIGE.f b/src-i386/frun_CEMANEIGE.f
new file mode 100644
index 00000000..fddc6a5f
--- /dev/null
+++ b/src-i386/frun_CEMANEIGE.f
@@ -0,0 +1,128 @@
+
+
+      SUBROUTINE frun_CEMANEIGE(
+                                 !inputs
+     &                             LInputs              , ! [integer] length of input and output series
+     &                             InputsPrecip         , ! [double]  input series of total precipitation [mm]
+     &                             InputsFracSolidPrecip, ! [double]  input series of fraction of solid precipitation [0-1]
+     &                             InputsTemp           , ! [double]  input series of air mean temperature [degC]
+     &                             MeanAnSolidPrecip    , ! [double]  value of annual mean solid precip [mm/y]
+     &                             NParam               , ! [integer] number of model parameter
+     &                             Param                , ! [double]  parameter set
+     &                             NStates              , ! [integer] number of state variables used for model initialising = 2
+     &                             StateStart           , ! [double]  state variables used when the model run starts
+     &                             NOutputs             , ! [integer] number of output series
+     &                             IndOutputs           , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs              , ! [double]  output series
+     &                             StateEnd             ) ! [double]  state variables at the end of the model run
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_cemaneige
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, intent(in) :: MeanAnSolidPrecip
+      doubleprecision, dimension(LInputs) :: InputsPrecip
+      doubleprecision, dimension(LInputs) :: InputsFracSolidPrecip
+      doubleprecision, dimension(LInputs) :: InputsTemp
+      doubleprecision, dimension(NParam)  :: Param
+      doubleprecision, dimension(NStates) :: StateStart
+      doubleprecision, dimension(NStates) :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      doubleprecision CTG,Kf
+      doubleprecision G,eTG,PliqAndMelt
+      doubleprecision Tmelt,Gthreshold,MinSpeed
+      doubleprecision Pliq,Psol,Gratio,PotMelt,Melt
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation des constantes
+      Tmelt=0
+      Gthreshold=0.9*MeanAnSolidPrecip
+      MinSpeed=0.1
+
+      !initilisation of model states using StateStart
+      G=StateStart(1)
+      eTG=StateStart(2)
+      PliqAndMelt=0
+
+      !setting parameter values
+      CTG=Param(1)
+      Kf=Param(2)
+
+      !initialisation of model outputs
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+
+        !SolidPrecip and LiquidPrecip
+        Pliq=(1-InputsFracSolidPrecip(k))*InputsPrecip(k)
+        Psol=InputsFracSolidPrecip(k)*InputsPrecip(k)
+
+        !Snow pack volume before melt
+        G=G+Psol
+
+        !Snow pack thermal state before melt
+        eTG=CTG*eTG + (1-CTG)*InputsTemp(k)
+        IF(eTG.GT.0) eTG=0
+
+        !Potential melt
+        IF(eTG.EQ.0.AND.InputsTemp(k).GT.Tmelt) THEN
+          PotMelt=Kf*(InputsTemp(k)-Tmelt)
+          IF(PotMelt.GT.G) PotMelt=G
+        ELSE
+          PotMelt=0
+        ENDIF
+
+        !Gratio
+        IF(G.LT.Gthreshold) THEN
+          Gratio=G/Gthreshold
+        ELSE
+          Gratio=1
+        ENDIF
+
+        !Actual melt
+        Melt=((1-MinSpeed)*Gratio+MinSpeed)*PotMelt
+
+        !Update of snow pack volume
+        G=G-Melt
+
+        !Water volume to pass to the hydrological model
+        PliqAndMelt=Pliq+Melt
+
+        !Storage of outputs
+        DO I=1,NOutputs
+          IF(IndOutputs(I).EQ.1) Outputs(k,I)=Pliq
+          IF(IndOutputs(I).EQ.2) Outputs(k,I)=Psol
+          IF(IndOutputs(I).EQ.3) Outputs(k,I)=G
+          IF(IndOutputs(I).EQ.4) Outputs(k,I)=eTG
+          IF(IndOutputs(I).EQ.5) Outputs(k,I)=Gratio
+          IF(IndOutputs(I).EQ.6) Outputs(k,I)=PotMelt
+          IF(IndOutputs(I).EQ.7) Outputs(k,I)=Melt
+          IF(IndOutputs(I).EQ.8) Outputs(k,I)=PliqAndMelt
+        ENDDO
+
+      ENDDO
+
+      StateEnd(1)=G
+      StateEnd(2)=eTG
+
+      RETURN
+
+      ENDSUBROUTINE
+
diff --git a/src-i386/frun_CEMANEIGE.o b/src-i386/frun_CEMANEIGE.o
new file mode 100644
index 0000000000000000000000000000000000000000..773e3315ef336b3afad3316ed3670e26e39cec94
GIT binary patch
literal 1095
zcmZ`&%}*0S6rb$}t_IvaV1kK<nv8lOja*2K8fsWXOfe+lH&Rf#NJK)QB_511Sy$3*
zYPjji|G{Xy;GvX{WJ{rum^ec_J*d%c7CCr88YA`17O|kbW@p~}{odES<^=^0;&R=M
zP_?6Z1b-xaKjP@+W7vhzYfw*t4;Oy<P)CoyuQ$@`AiEy{bUfj|H9ESxN11uV{YJJY
ztOE*f*8CG6K!L!eE0-^7EA@tg1Juh2qYL*K5q#B<8xqC?d`DlB+LHQGZ0g6mSP;ub
z5O?JEvO}1;S+mHhSQi%ASrIOu^z^&{@j={23zMKBreHB%Kg+XfNx`jPId8=}ajnq+
z?sYM+Z5K76^f{vwD-alD3R!2$@;WV$kHn;@yqTM(saz0hC=?i6N6dVZuF?dZ&)O_2
zjqis-j7UbibK5RP=qmHz>^JGjVSval<`tnnF^N~^cS>K&t<o7X^)L#BWhgu-khmw=
zuw*yJBS(=|bV-k&^Nx#dNq+$f%`n*(X(s*#4E_+IaN>KUm1b;jd<@YAqxzXv6ryu<
z0XQaeHfk}l`CEpDO#4V|E&lcxkKaL5v-~EKWkj16PIlp1N&mW0D%oCYLVlRaFgwVu
ziP}v4jqcFRX}ZW{x=1tDNU2m(C$yp`+D+4dr2*>(j4f01?}WzuyaAY?FT0X`U!KhP
z7s$_u(?75Uny@|tGQr=^qpeA>B>g3v(EBT`=#AFU6qHCoiJyRK#VSDN0htHHa*#cM
zn1Gmod~gs^(&s<{EMv`rGQmYv)h0d%kaRk|(zK9HpXNpleEZ<5LZ7xYdrR}H1A}3(
zxNMXV>KD|J=uoJ+rTxr>mbTUwzgp(X`-hN#e8>fV|4ymgMoznhyReVj*P?P0fdrqO
nSrDq+LLU8JpNb9SeYu6&e-a%4B;-8hcKBZJP<Ws}974YVkPeC8

literal 0
HcmV?d00001

diff --git a/src-i386/frun_GR4J.f b/src-i386/frun_GR4J.f
new file mode 100644
index 00000000..953e7647
--- /dev/null
+++ b/src-i386/frun_GR4J.f
@@ -0,0 +1,225 @@
+
+
+      SUBROUTINE frun_GR4J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr4j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR4J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR4J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR4J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=4)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3))**3.5
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(14)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src-i386/frun_GR4J.o b/src-i386/frun_GR4J.o
new file mode 100644
index 0000000000000000000000000000000000000000..05b65ec95e67158a51d4b9da0364609149cd0174
GIT binary patch
literal 2505
zcmZ`*U1$_n6uy%m9Wm*SHb~m0bSW1biVYjdL!^~%VPj)S+t5ZUZR$jcaa*h|F|iSX
z#_lG%Y_|BYv@gMjJ_)hVLTC+yvTI^B8z1~BWo~xvngk!Ru?_w}jkLJ^&Yfh85(nm<
zZ_fG7x#!$_=FT)|MU1X)ow0Qa6=_u+`?@+5c7~r;F*XF)zuI{&hw!q-ma5i09eW(r
zGe<x3C9C!xKKx9=qM?U)?N0`*gspXP&Lw}u^Y8d%=f@}h8i6Wyj$0%m+$NFWQzVA?
zRR~$fB$EZQiFd^Y_#e<@a<LIU3*h-?6k~SUx+@d>ETAaHz(i7{Z_Y_^WQ`n9>e~g<
zlH2sSLy87?i%3SxxOFeu#9OU5XyvlwvY8vWeH56*V2}ZBKpo&d`<M>8n6;+`(Sm9u
zvezLapxwZOpn9_@<#rb-C-^Bu!n`7#ne&_+EM&}1Dc7!SPVUsjJjKfWNF>W{<y|6a
z-CMB`&&j=Te!2#vU&d7hmz~tC2?R7m8l#Vr!|i`&H82Ko8&6l@cPl_O)-=)VZ939L
zMFXlLF`vmzUXwx;>y&yk*F|v&ko`Wh9?A;tMis@z5@A+Vu58Yl4L?sNOd*ol8Co(s
zZOzEtI$+ScfXxnCrDYBUh&olI?YeR?!p{JEevK$ORMHlW@By-(QzFyMLx98yck|Ht
z<E60x5B;q5COscE@KAiGKb+FeYcR);Fc}%G2Mi}QYuql7pDu(i=vyv#&f2kAsE1zz
zi@ddDcwwVFL%n!>wG--c{JSYUy0L~f;)&vs;|lRAY5UF?1sGS!Iztp!5S>;oh2E{;
zE9{x9)6sm}YOxd{wN5E3WsQpYn>jrBaQi)duVOYaA*Qmo!~`~{hk|aP?GfXdYmc|b
zzK8gj#Ay%eV4rG3YLG^?|10m5(>yd)b{b=&J&u0ZAp7W5#j}CrsoT9yN}fLIWHBnH
zkjiO-^CFEm`W9ejZt^<1`;wT*+@8E4Gswq)X$mH^)hjaMyeg)Sw?&!;f_6!>97&p9
z;Gi@sAwtshp$4;-2ER1x;nsr)c0^4l%|?VZcS*BFn!yuebgq21+x&b~+Hz8);gnEx
zEZDe6=Waa8=fO`nsit!u<nwtXeimN2#DBnIF)MUqGw;f6hwgUi>E+js>ZCfsHmyOU
z3~)b*1m8tshzCim?H!M%JlogC2l#oMGSQpS243^v8phh;KQYt&!FU6&$7AJi1@<!5
z%`5K@{-nhh`zdf?K{k&rprOJGTRZRIlx#%Q_y}hZqS%WF@c{h0xsKFH8NOH^E#lDw
zyh!b9yvebW0*8g8i*Q3HcMf;dUrr%^0cO$&C-p50oe!jiI#fC9d#~e!@p-<@z>Y()
zw)*dA2Y)MuGH?dBkZaRA4U}5EPjCv5re94EkEqbHXb$>%=#ip9qG&Fj;5rcME{CfD
zyQ&L*j<$qW1$0FU@G_8ekc*-feD>1Ad>#(XV8%B0{&TDbS=Hb*t&R2bRwz?5h1x6}
zHpR<Q)yY`NNvxiXT+vaoe6bMvEq6L|;fvav2T)e;cI<i#1*s!J21c>ozq{*wVvKfH
z^^n?j#v0$jGWZ$m!EKQIt*x!??W<R=Y-Owk&tCtX{L!%{#@JfitJo<QeGgQMyNr#w
z=w)oV!`lbsSo>U*a;+0CvVopcQD$7-f~)i5d~xEv?xKHP^a9Qx$F~K@;q|$?epmN{
ztMlV)>hN|0dDOh^Ky<2?vE#0_s_lyd`=F!iQJ%5=T3dVPLG#^@YTm1AbJS|Y8=x+Y
zd07FnUg@G)k{~J$TmA<_4u#qv{$c2A@c3H(_kv=<d2Cxk%l}+Z-pZV1e=U@0p;o!%
z?n<*`&%xl)km)E;1v5j3zIM%27c+yM)r$le7B!on)Vu_X`PHFTbANlymnJjSdO7%i
D{jCl+

literal 0
HcmV?d00001

diff --git a/src-i386/frun_GR5J.f b/src-i386/frun_GR5J.f
new file mode 100644
index 00000000..4b7b7351
--- /dev/null
+++ b/src-i386/frun_GR5J.f
@@ -0,0 +1,226 @@
+
+
+      SUBROUTINE frun_GR5J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr5j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+      !Param(5) : intercatchment exchange constant (X5 - CES2) [-]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR5J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR5J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR5J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=5)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3)-Param(5))
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(14)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src-i386/frun_GR5J.o b/src-i386/frun_GR5J.o
new file mode 100644
index 0000000000000000000000000000000000000000..10e47297174b2af019c51aaa402f720fa8c9e1e1
GIT binary patch
literal 2433
zcmZ`*U2GIp6u#3R7(#Ie+>l0V+=m-%3^pw(Nr@6yvtThr8ZC%gnPS>yH3%E%Vu=Kb
zyDe;%H9R!>((p`zCYm%#lSX&jqIBB_z@N-z=k_l?bc;6pB(fxi^*eXkX(45jx#yd6
zzH{z5_uRQN4O$7Kt5#=htwJSQReM`UyTZ=Uxq`7iz`ZM-=k*Xi*4R?jy1#wDqk7`#
zXVs~ykB%OFB4OUpNxUPE2IR2S&d<5vk9hvw@9uf$^xp$eCBESni5Ry@^zca%ef%1P
z+{Pr6MY4%^BzpPp&}4Io0X_rZ`C<s;_>^@=_V9~<q7(xYDUq3&mEzbc*{jsIilimC
z>q&<c5AYU|ihH?rH{Qfst(R!!#z$l`H*i-|V3vSE2DkxrfLGfmb<o9(Jtc@1QX`Rl
z4jBRM1|9;{H=b5*caU-qKZ{71S7frYo--$l8MD*MwPQRd_vm7dV&%Ril4ZB@4w16%
zE?bD_%w{-0UIWtia#g`qCpBvn0S%GCSWU^{ZhT@jFotj&k5|y>R)A`(DWciib)<`m
zdR0YYE}Oe~T?$dEQ|irJ7o}xD_D*I!kQLmGDoTw7!i=h1*_<`&f0|5~LZrs0Y02!2
zH7)n)fFWxT%??>>ybcAZ97tsBZRKKsUjX*}7*n#ZEEtdRUb23pM7EiS0f`em!NcoL
ztw{uU_<OA@<=NH1!^u7VXj;3h!JItCWNfG&Fq+b=5xYpfpN|geTdqcC?8FSz{V#w;
z-dZY}-ykp0UOctZ33WC3)g&I>SbZDtMDfURnRu1dz6(YX#uaj#A=1_zyUl0s)aCX%
z)EY+Thpj;|H<9yn`w&8miOKOPtam5EqM_?)&BaLe`r?|~ccHJ~s@sqD+^<@?{Ng+N
z0gK#-@B!|(N6_N+vYXyM>H;#O4eXo9VXXFa)8-UIViKvGCpafEcuD^P%+B7tfwX@W
zquE<Gf0J1xV!$*B6L!k;GUn`l6D8`>G!U*sn&sI3rVltI%}R){G^@p^H0x;aOS2ws
zorqw^)O6BpL|AjLG+U$@Iz3EB#RvP$4~L{JEioc82-l+=2<HBHSSWzs<D{C&y;Ud_
zkoZM-<<kEFi}|du!J2tT?ih5*A7Ew4pK07(lTs(r##Ly1FZYw^;d@E+@eqmCT_f?d
zXUFPfFTadaBR&yt;I;R!W321{6A|uRN;dF%JXZEsppA(Wyz<_q@3iFn{s;`_W%E!T
z8zh?F8o7;AuMts`1DrvK(hABX0RIzQN8Y52UMY{4@c2PqqMDj)a;&7l%kSu7+|bG0
z2X_=-P9arQ(uk(?E&0fOX`v2P&bqD}I5Da{UuHqZAy-%PPrRMKl0X?aQ(MTjX{`oI
z9o`Q(1xRyFO^}SK(6VF}`g-V*qCui$Hrc~<Ak<wBR|9rc7yKM;8LbNFiWJ~pkaUns
z;uU=6{)0jR4$WXDHg)}bvKCp@;<c+woa3!frl*Uw88~cAdeb$jMA;dvo{Wv@C|N#J
z4E>hdkzDkO_VPiL)wKgHPoN<6ip#(d*83NCy-yEQXVnHePZwj2uVESdjCJBRNd6QI
z24B54HntUCM*r=?@!=*AR^wj5&bsJppf$L?Y}iH5q1_Iz4al)}yD05iM_ptCJ*A>d
zySluq^Wm&;;=Sl1`Up6>_kbK<)73>>oq?~Q!>a=Fs5xE-qSM&Rb}d?iA0KRkj;@CV
z#tvw~BauVq8*guZvnuGQ)rg(0E{*wE5i(rvqFK&^s5ortp9eV<YoFuagZ?)bucdz-
zC=r}R+X7np$AR*e=Pdc#piGN3zToakvwi=e(DAV8C{P76!-qd}%~TgNLy?+!0u1w-
ZO^<4xg~j~zaI1OX$mUN>W~%ja@c-#D^Bw>I

literal 0
HcmV?d00001

diff --git a/src-i386/frun_GR6J.f b/src-i386/frun_GR6J.f
new file mode 100644
index 00000000..9d7f9373
--- /dev/null
+++ b/src-i386/frun_GR6J.f
@@ -0,0 +1,249 @@
+
+
+      SUBROUTINE frun_GR6J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr6j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+      !Param(5) : intercatchment exchange constant (X5 - CES2) [-]
+      !Param(6) : time constant of exponential store (X6 - EXP) [d]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR6J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR6J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR6J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=6)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,C,EN,ER,PN,PR,PS,WS,tanHyp,AR
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD,QR1
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+      DATA C/0.4/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3)-Param(5))
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+(1-C)*X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Update of exponential store
+      X(6)=X(6)+C*X(8)+EXCH
+      AR=X(6)/Param(6)
+      IF(AR.GT.33.)AR=33.
+      IF(AR.LT.-33.)AR=-33.
+
+      IF(AR.GT.7.)THEN
+      QR1=X(6)+Param(6)/EXP(AR)
+      GOTO 3
+      ENDIF
+
+      IF(AR.LT.-7.)THEN
+      QR1=Param(6)*EXP(AR)
+      GOTO 3
+      ENDIF
+
+      QR1=Param(6)*LOG(EXP(AR)+1.)
+    3 CONTINUE
+
+      X(6)=X(6)-QR1
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD+QR1
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QR1           ! QR1    ! outflow from exponential store (QR1) [mm/d]
+      MISC(14)=X(6)          ! Exp    ! exponential store level (X(6)) (negative) [mm]
+      MISC(15)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(16)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src-i386/frun_GR6J.o b/src-i386/frun_GR6J.o
new file mode 100644
index 0000000000000000000000000000000000000000..96714b9073b4f265df1c3b32067ea7b28ce84516
GIT binary patch
literal 2977
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
C#=33*

literal 0
HcmV?d00001

diff --git a/src-i386/utils.f b/src-i386/utils.f
new file mode 100644
index 00000000..2028bc71
--- /dev/null
+++ b/src-i386/utils.f
@@ -0,0 +1,272 @@
+
+
+C**********************************************************************
+      SUBROUTINE HU1(XV,C,D)
+C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1
+C Inputs:
+C    C: time constant
+C    D: exponent
+C Outputs:
+C    XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,D,SS1
+      INTEGER I
+
+      DO I=1,NH
+      XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D)
+      ENDDO
+      ENDSUBROUTINE
+
+
+C**********************************************************************
+      SUBROUTINE HU2(XV,C,D)
+C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2
+C Inputs:
+C    C: time constant
+C    D: exponent
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,D,SS2
+      INTEGER I
+
+      DO I =1,2*NH
+      XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D)
+      ENDDO
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE HU4(XV,ALPHA,BETA)
+C Computation of ordinates of MOHYSE unit hydrograph
+C Inputs:
+C    Alpha: parameter
+C    Beta:  parameter
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH)
+      DOUBLEPRECISION ALPHA,BETA,SU
+      INTEGER K
+
+      SU=0.
+c      IF(ALPHA.LT.1.)THEN  
+c      WRITE(*,*)' Pb ALPHA'
+c      STOP                 
+c      ENDIF                
+      IF(ALPHA.EQ.1.)THEN
+      U(1)=1.
+      SU=1.
+      DO 1 K=2,3*NH
+      U(K)=0.
+    1 CONTINUE
+      ELSE
+      DO 11 K=1,3*NH
+      U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA)
+      SU=SU+U(K)
+   11 CONTINUE
+      ENDIF
+
+c      IF(SU.LT.0.0000000001)THEN       
+c      WRITE(*,*)' Pb HU4',ALPHA, BETA  
+c      STOP                             
+c      ENDIF                            
+      DO 2 K=1,3*NH
+      XV(3*NPX+K)=U(K)/SU
+    2 CONTINUE
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE HU(XV,C)
+C Computation of ordinates of GRP unit hydrograph
+C Inputs:
+C    C: time constant
+C    Alpha: parameter
+C    Beta:  parameter
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C
+      DOUBLEPRECISION SH
+      INTEGER I
+      DO 10 I=1,2*NH
+      XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C)
+   10 CONTINUE
+      RETURN
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      FUNCTION SH(I,C)
+C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU
+C Inputs:
+C    C: time constant
+C    I: time-step
+C Outputs:
+C    SH: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION C
+      DOUBLEPRECISION SH,FI
+      INTEGER I
+      
+      FI=I
+      IF(FI.LE.0.)THEN
+      SH=0.
+      RETURN
+      ENDIF
+      IF(FI.GE.C)THEN
+      SH=1.
+      RETURN
+      ENDIF
+      SH=FI**2.5/(FI**2.5+(C-FI)**2.5)
+      RETURN
+      ENDFUNCTION
+
+
+C**********************************************************************
+      FUNCTION SS1(I,C,D)
+C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1
+C Inputs:
+C    C: time constant
+C    D: exponent
+C    I: time-step
+C Outputs:
+C    SS1: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION C,D,SS1
+      INTEGER I,FI
+
+      FI=I
+      IF(FI.LE.0.) THEN
+      SS1=0.
+      RETURN
+      ENDIF
+      IF(FI.LT.C) THEN
+      SS1=(FI/C)**D
+      RETURN
+      ENDIF
+      SS1=1.
+      ENDFUNCTION
+
+
+C**********************************************************************
+      FUNCTION SS2(I,C,D)
+C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2
+C Inputs:
+C    C: time constant
+C    D: exponent
+C    I: time-step
+C Outputs:
+C    SS2: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION C,D,SS2
+      INTEGER I,FI
+
+      FI=I
+      IF(FI.LE.0.) THEN
+      SS2=0.
+      RETURN
+      ENDIF
+      IF(FI.LE.C) THEN
+      SS2=0.5*(FI/C)**D
+      RETURN
+      ENDIF
+      IF(FI.LT.2.*C) THEN
+      SS2=1.-0.5*(2.-FI/C)**D
+      RETURN
+      ENDIF
+      SS2=1.
+      ENDFUNCTION
+
+
+
+C**********************************************************************
+      SUBROUTINE DEL(XV,C)
+C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
+C (all ordinates are nul except 2 at max)
+C Inputs:
+C    C: time constant
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,F
+      INTEGER I,K
+      I=INT(C)
+      F=C-INT(C)
+      DO 1 K=3*NPX+1,3*NPX+3*NH
+      XV(K)=0.
+    1 CONTINUE
+      XV(3*NPX+I)=1.-F
+      XV(3*NPX+I+1)=F
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE DEL2(XV,C)
+C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
+C (all ordinates are nul except 2 at max)
+C Inputs:
+C    C: time constant
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,F
+      INTEGER K,I
+      
+      IF(C.GT.FLOAT(NH)) C=FLOAT(NH)
+      I=INT(C)
+      F=C-INT(C)
+      DO 1 K=3*NPX+1,3*NPX+NH
+      XV(K)=0.
+    1 CONTINUE
+      XV(3*NPX+I)=1.-F
+      XV(3*NPX+I+1)=F
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      FUNCTION tanHyp(Val)
+C Computation of hyperbolic tangent
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION Val,ValExp,tanHyp
+
+      ValExp=EXP(Val)
+      tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp)
+      RETURN
+      ENDFUNCTION
+
diff --git a/src-i386/utils.o b/src-i386/utils.o
new file mode 100644
index 0000000000000000000000000000000000000000..b94abd7298615d02807e93345ac96310a811dc8c
GIT binary patch
literal 2548
zcmaJ@UuauZ7(eOKHfW?_>$F0_BFEXetaM`!m8~wapnC`!T&5k1%{tdV!>FZ6Y?VH2
z-id?|2%--{ABr!&`cURZho)<Av`>4yXX(k@gOIGDI1p_aF8;oA?!8IcZ5M9NcfRxe
z`F-E{os%1Kxfwn0c^G>^Np4qPa&#uCWc`zCV{8H9P`jSLh@ppt&-GmxNsegM6MqA&
zKi_vgk$9qkwQz~-rkVqGVl8OpwEYn;U{phyAP*Or*eF&KBhthyBAHmh>?6@i1<45a
zh!xq%Wt8_ri1Hp0<-Rh75kc;Q!XtycA8$|Tp6ph3YL&EWOQi?v&!+#$-guQ9q%aDh
z<?QFoo}1DXWu?1H>qgZN1pS!^AIPwDkarjH5;iFkC!|RltREq*WWcyv<jtkK_ooj?
zE0BL#wh*Gy7LX_u=5yE&W)%FCmIm9vJm@7vO=jjng@TNm@NCEO_D(F*d+HdRdI5Go
zvSvVpA(vg)*PJQ)8_iFPjSt>GwdjIqRF7riJe-;35kwhUk7bklSUSr6DBdsIi<Rl5
zPMA(=oz<q7rMdo$9Um~QRpl|MJxUchCr=`YvFtJ)?(MkpHS$sDY@$ZdY5S#^`c~v^
zZykH;=k<bAt#B%Gr~r)JL<g}_`M6fAS@mtRhFhIH<UyoSUaOUHc;%#N6po!8j(uqL
z|1`RBs7S3q8*T-8FLfpx=l)ER4`ne2Ku_Au)3e-71(X;6tJO${OkGOp=jETEL$dH%
zoOj7N^Do56o@i0E_kvNqsjGI<9MWB`_O~#Wxx#}q+~5HWI1y!$7pukl^3Iph)UXtY
zA4dM6?01~Z#fIjK^ci{2>$g+?60NgI9=@gk*ZCg&ebam(=WeO)=Uv9;U}{~OmkSgG
zbuVM{TBK>df-)KTD=GlYNkS2|$P_?2%^%bp!j6T|$AGyd{s5cx5rwTjqFC{*h4?^e
zMMg@SD4JSsJRB@7rEXS+X{Qv?t@B9zw%8X1`zF!$WMz%8=zQWSS3<zP5&}rR<4R~i
zLsx>w>X*P~sS4BubRPU{C-!w1-y`YcvaM2Oc!@_(&!|_aGjs`2AH)ipD-`?7Hv9J{
zk5Usg^FxH9!x%$b93)?P^b8wXdDjuwujlAI8ilB0t9{;#suxV_#Qo(1XJ&a@$1g$N
zw%{ED&)nAzP)%{}E_QMZZ5c05dwJ2#OBIJdk(-+a(PBLHHz<_X_mP}iCB9$?6YPT5
zxj#-BRZm00Rv%@sh&qjKZilcVd-lwJW9c=G!OA8!6i`*4wDBA#JhJ<a>|Qkrp0msL
z`4+P4`Wr~PI7pexVgo(?wSK=FRl2Wxa0Ob|EJ`9v6wxh~%zI+Bv{c$!&e;!RmyY8f
zF#rpU4CDNpFG1LYw~Zae?_Ru}?2IGbb)-KbX}d>`)P{a(4=*IWy4#T^oz=H+ytLhn
zBmJ<;_9#Jm9x*%FVf-WNDDObh9&tyScUJR`uH;BRw%We89m$990UhrXNIFN#(e;g8
zjE^EOJ&$UPjk{9Gi}6I?m{zIZSYje(PhG5swV<Z$Pb`r*Oh!4p%7#I6h%`O0wlotd
zrO7pFl-E2u;@BJ^FCY5hXjFC|s<bp0M&qOkqsF?10_E$P<jAKJUrff%p;B$r_?<)r
z>~ejBHTpWLKaJl=fCQWRnk_Yc9|7d!Z5qCf02?;+b=3UCCO@05YtU5|8=aYK){yW2
DVY?*7

literal 0
HcmV?d00001

diff --git a/src-x64/airGR.dll b/src-x64/airGR.dll
new file mode 100644
index 0000000000000000000000000000000000000000..fe805fb6e20cf3d273f4e86c7775897d6194b511
GIT binary patch
literal 28672
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
BH*f#|

literal 0
HcmV?d00001

diff --git a/src-x64/frun_CEMANEIGE.f b/src-x64/frun_CEMANEIGE.f
new file mode 100644
index 00000000..fddc6a5f
--- /dev/null
+++ b/src-x64/frun_CEMANEIGE.f
@@ -0,0 +1,128 @@
+
+
+      SUBROUTINE frun_CEMANEIGE(
+                                 !inputs
+     &                             LInputs              , ! [integer] length of input and output series
+     &                             InputsPrecip         , ! [double]  input series of total precipitation [mm]
+     &                             InputsFracSolidPrecip, ! [double]  input series of fraction of solid precipitation [0-1]
+     &                             InputsTemp           , ! [double]  input series of air mean temperature [degC]
+     &                             MeanAnSolidPrecip    , ! [double]  value of annual mean solid precip [mm/y]
+     &                             NParam               , ! [integer] number of model parameter
+     &                             Param                , ! [double]  parameter set
+     &                             NStates              , ! [integer] number of state variables used for model initialising = 2
+     &                             StateStart           , ! [double]  state variables used when the model run starts
+     &                             NOutputs             , ! [integer] number of output series
+     &                             IndOutputs           , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs              , ! [double]  output series
+     &                             StateEnd             ) ! [double]  state variables at the end of the model run
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_cemaneige
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, intent(in) :: MeanAnSolidPrecip
+      doubleprecision, dimension(LInputs) :: InputsPrecip
+      doubleprecision, dimension(LInputs) :: InputsFracSolidPrecip
+      doubleprecision, dimension(LInputs) :: InputsTemp
+      doubleprecision, dimension(NParam)  :: Param
+      doubleprecision, dimension(NStates) :: StateStart
+      doubleprecision, dimension(NStates) :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      doubleprecision CTG,Kf
+      doubleprecision G,eTG,PliqAndMelt
+      doubleprecision Tmelt,Gthreshold,MinSpeed
+      doubleprecision Pliq,Psol,Gratio,PotMelt,Melt
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation des constantes
+      Tmelt=0
+      Gthreshold=0.9*MeanAnSolidPrecip
+      MinSpeed=0.1
+
+      !initilisation of model states using StateStart
+      G=StateStart(1)
+      eTG=StateStart(2)
+      PliqAndMelt=0
+
+      !setting parameter values
+      CTG=Param(1)
+      Kf=Param(2)
+
+      !initialisation of model outputs
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+
+        !SolidPrecip and LiquidPrecip
+        Pliq=(1-InputsFracSolidPrecip(k))*InputsPrecip(k)
+        Psol=InputsFracSolidPrecip(k)*InputsPrecip(k)
+
+        !Snow pack volume before melt
+        G=G+Psol
+
+        !Snow pack thermal state before melt
+        eTG=CTG*eTG + (1-CTG)*InputsTemp(k)
+        IF(eTG.GT.0) eTG=0
+
+        !Potential melt
+        IF(eTG.EQ.0.AND.InputsTemp(k).GT.Tmelt) THEN
+          PotMelt=Kf*(InputsTemp(k)-Tmelt)
+          IF(PotMelt.GT.G) PotMelt=G
+        ELSE
+          PotMelt=0
+        ENDIF
+
+        !Gratio
+        IF(G.LT.Gthreshold) THEN
+          Gratio=G/Gthreshold
+        ELSE
+          Gratio=1
+        ENDIF
+
+        !Actual melt
+        Melt=((1-MinSpeed)*Gratio+MinSpeed)*PotMelt
+
+        !Update of snow pack volume
+        G=G-Melt
+
+        !Water volume to pass to the hydrological model
+        PliqAndMelt=Pliq+Melt
+
+        !Storage of outputs
+        DO I=1,NOutputs
+          IF(IndOutputs(I).EQ.1) Outputs(k,I)=Pliq
+          IF(IndOutputs(I).EQ.2) Outputs(k,I)=Psol
+          IF(IndOutputs(I).EQ.3) Outputs(k,I)=G
+          IF(IndOutputs(I).EQ.4) Outputs(k,I)=eTG
+          IF(IndOutputs(I).EQ.5) Outputs(k,I)=Gratio
+          IF(IndOutputs(I).EQ.6) Outputs(k,I)=PotMelt
+          IF(IndOutputs(I).EQ.7) Outputs(k,I)=Melt
+          IF(IndOutputs(I).EQ.8) Outputs(k,I)=PliqAndMelt
+        ENDDO
+
+      ENDDO
+
+      StateEnd(1)=G
+      StateEnd(2)=eTG
+
+      RETURN
+
+      ENDSUBROUTINE
+
diff --git a/src-x64/frun_CEMANEIGE.o b/src-x64/frun_CEMANEIGE.o
new file mode 100644
index 0000000000000000000000000000000000000000..d2426e2b3bd71b5949199d4609cd89180005f7df
GIT binary patch
literal 1498
zcmZ`(U2GIp6uz@FEz?RkL#Po9(2b7CG||bTHG&~whVH^_T+GT(TS9-KI|#w1fiCF-
zX-e8f%%-FdK1jj?PliO}6Aw1=p%p3!HG)M_!A3AKx)x(IDOwxC`klLN-8FENd(L;y
z`R=)A?wNZ!PL&HDA8SGw5^2KjPW5z4To5xMAv8sZHgI^b3X5c$-O=9NE-g<Nj!2H!
z`;Q%aI-}s}V_r{bKnJc_wREQ=B97fv%3BUfEs{FDkRNZ6yrZSOFxwY6fN~%|$8B)y
z-97H^Jq`7{yps<uz(F;&Ce@rUjVRSb%`jxbj6m)-9mpm#3E5$`K^`%?ATOGI*ah%~
zIRp@p@wyJ3tr><CiR_1F7#Enxo--rR9<;&wz?hf4XgUltBMCr{A$g;jKLVGG7g^Nl
z-Up*WjEqX}@0+X->jCY3jm~TXmm_b4_NgHs+i*9Cl2OJd`f=)g#H*LMsNUe_F=>sF
zb;I95y<_ZJw;DD#`#fSc-AoLg&=sogV_Hy0#><m9d+(_4l65uMN=DV4fSSHx&)Oew
z{O_38e6l8(^<6-XzhHjplYNEWe+BtaHo;lNsq;q|XBm8tgF7D{U*ku~n#K7oe{t~J
z9N-p2;{-xZu=AhHU7YnZD2?;I4Q~x<)f>K!4{Bdczq*j0+dm(ofloO5{&|%$pK{K$
zGECJ2oWAh-M-@+*+jPBqO*C6|1|%hYosA&r(vki(-hWAnZknPD<@0$jJ76Y}F9*SN
zbh1!>OP1e~<+o({Em?j`mfw=)w`BRP#qwK)@_Q#Q^G~#|rM1~@a+}>2xAhX@TDko=
z%pXERTKWwbMD86JhWK_a<C=b=Q`a8n^L!&yxZ7I+HBUg_$qmCwna?1nC$YIKU5U$C
z8Og1}Zmi4G6$rLErxljV<kHAJ1Rq|VGSeItJ2vL-0}UxV*NdHV6(atdE}Y3_;?1k&
zqW1GLVPDXM^^q!GI2{sedld29yF#o|o)ya@&$Lx`RV4M1@*CQ{&<x-4pXdqyjhQXL
zBje)_SdTC0^JmWvZ>fi21*RsxT|!e!Xl@As$iAXV$&XYO{DLYavi(CxQb0T&=Y=?^
z_(#*7t#z>-?%T2W_L%J#e2b4;5n&NRLH|FBI~%)Ig}-BQSAkvJ)%YXTC&el1Xxwd{
z$SLY(@_Q7ga6pkP?qvLKRfT(5Y0I;Vx)}FrRS83ujw&qWjT}h5*WQ^rbTHK_{sn*x
BT&4g3

literal 0
HcmV?d00001

diff --git a/src-x64/frun_GR4J.f b/src-x64/frun_GR4J.f
new file mode 100644
index 00000000..953e7647
--- /dev/null
+++ b/src-x64/frun_GR4J.f
@@ -0,0 +1,225 @@
+
+
+      SUBROUTINE frun_GR4J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr4j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR4J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR4J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR4J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=4)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3))**3.5
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(14)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src-x64/frun_GR4J.o b/src-x64/frun_GR4J.o
new file mode 100644
index 0000000000000000000000000000000000000000..f461567fb2f2cf8ab191e90baa9c7b633a3bf4ab
GIT binary patch
literal 2975
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

literal 0
HcmV?d00001

diff --git a/src-x64/frun_GR5J.f b/src-x64/frun_GR5J.f
new file mode 100644
index 00000000..4b7b7351
--- /dev/null
+++ b/src-x64/frun_GR5J.f
@@ -0,0 +1,226 @@
+
+
+      SUBROUTINE frun_GR5J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr5j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+      !Param(5) : intercatchment exchange constant (X5 - CES2) [-]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR5J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR5J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR5J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=5)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3)-Param(5))
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(14)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src-x64/frun_GR5J.o b/src-x64/frun_GR5J.o
new file mode 100644
index 0000000000000000000000000000000000000000..18fcfc164c9aa320df5a92c59cb4ef1b9dc854a6
GIT binary patch
literal 2875
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

literal 0
HcmV?d00001

diff --git a/src-x64/frun_GR6J.f b/src-x64/frun_GR6J.f
new file mode 100644
index 00000000..9d7f9373
--- /dev/null
+++ b/src-x64/frun_GR6J.f
@@ -0,0 +1,249 @@
+
+
+      SUBROUTINE frun_GR6J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr6j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+      !Param(5) : intercatchment exchange constant (X5 - CES2) [-]
+      !Param(6) : time constant of exponential store (X6 - EXP) [d]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR6J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR6J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR6J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=6)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,C,EN,ER,PN,PR,PS,WS,tanHyp,AR
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD,QR1
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+      DATA C/0.4/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3)-Param(5))
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+(1-C)*X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Update of exponential store
+      X(6)=X(6)+C*X(8)+EXCH
+      AR=X(6)/Param(6)
+      IF(AR.GT.33.)AR=33.
+      IF(AR.LT.-33.)AR=-33.
+
+      IF(AR.GT.7.)THEN
+      QR1=X(6)+Param(6)/EXP(AR)
+      GOTO 3
+      ENDIF
+
+      IF(AR.LT.-7.)THEN
+      QR1=Param(6)*EXP(AR)
+      GOTO 3
+      ENDIF
+
+      QR1=Param(6)*LOG(EXP(AR)+1.)
+    3 CONTINUE
+
+      X(6)=X(6)-QR1
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD+QR1
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QR1           ! QR1    ! outflow from exponential store (QR1) [mm/d]
+      MISC(14)=X(6)          ! Exp    ! exponential store level (X(6)) (negative) [mm]
+      MISC(15)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(16)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src-x64/frun_GR6J.o b/src-x64/frun_GR6J.o
new file mode 100644
index 0000000000000000000000000000000000000000..3f0b624ef8234df41045bbc4ba748a543a9dd211
GIT binary patch
literal 3415
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

literal 0
HcmV?d00001

diff --git a/src-x64/utils.f b/src-x64/utils.f
new file mode 100644
index 00000000..2028bc71
--- /dev/null
+++ b/src-x64/utils.f
@@ -0,0 +1,272 @@
+
+
+C**********************************************************************
+      SUBROUTINE HU1(XV,C,D)
+C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1
+C Inputs:
+C    C: time constant
+C    D: exponent
+C Outputs:
+C    XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,D,SS1
+      INTEGER I
+
+      DO I=1,NH
+      XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D)
+      ENDDO
+      ENDSUBROUTINE
+
+
+C**********************************************************************
+      SUBROUTINE HU2(XV,C,D)
+C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2
+C Inputs:
+C    C: time constant
+C    D: exponent
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,D,SS2
+      INTEGER I
+
+      DO I =1,2*NH
+      XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D)
+      ENDDO
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE HU4(XV,ALPHA,BETA)
+C Computation of ordinates of MOHYSE unit hydrograph
+C Inputs:
+C    Alpha: parameter
+C    Beta:  parameter
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH)
+      DOUBLEPRECISION ALPHA,BETA,SU
+      INTEGER K
+
+      SU=0.
+c      IF(ALPHA.LT.1.)THEN  
+c      WRITE(*,*)' Pb ALPHA'
+c      STOP                 
+c      ENDIF                
+      IF(ALPHA.EQ.1.)THEN
+      U(1)=1.
+      SU=1.
+      DO 1 K=2,3*NH
+      U(K)=0.
+    1 CONTINUE
+      ELSE
+      DO 11 K=1,3*NH
+      U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA)
+      SU=SU+U(K)
+   11 CONTINUE
+      ENDIF
+
+c      IF(SU.LT.0.0000000001)THEN       
+c      WRITE(*,*)' Pb HU4',ALPHA, BETA  
+c      STOP                             
+c      ENDIF                            
+      DO 2 K=1,3*NH
+      XV(3*NPX+K)=U(K)/SU
+    2 CONTINUE
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE HU(XV,C)
+C Computation of ordinates of GRP unit hydrograph
+C Inputs:
+C    C: time constant
+C    Alpha: parameter
+C    Beta:  parameter
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C
+      DOUBLEPRECISION SH
+      INTEGER I
+      DO 10 I=1,2*NH
+      XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C)
+   10 CONTINUE
+      RETURN
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      FUNCTION SH(I,C)
+C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU
+C Inputs:
+C    C: time constant
+C    I: time-step
+C Outputs:
+C    SH: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION C
+      DOUBLEPRECISION SH,FI
+      INTEGER I
+      
+      FI=I
+      IF(FI.LE.0.)THEN
+      SH=0.
+      RETURN
+      ENDIF
+      IF(FI.GE.C)THEN
+      SH=1.
+      RETURN
+      ENDIF
+      SH=FI**2.5/(FI**2.5+(C-FI)**2.5)
+      RETURN
+      ENDFUNCTION
+
+
+C**********************************************************************
+      FUNCTION SS1(I,C,D)
+C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1
+C Inputs:
+C    C: time constant
+C    D: exponent
+C    I: time-step
+C Outputs:
+C    SS1: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION C,D,SS1
+      INTEGER I,FI
+
+      FI=I
+      IF(FI.LE.0.) THEN
+      SS1=0.
+      RETURN
+      ENDIF
+      IF(FI.LT.C) THEN
+      SS1=(FI/C)**D
+      RETURN
+      ENDIF
+      SS1=1.
+      ENDFUNCTION
+
+
+C**********************************************************************
+      FUNCTION SS2(I,C,D)
+C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2
+C Inputs:
+C    C: time constant
+C    D: exponent
+C    I: time-step
+C Outputs:
+C    SS2: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION C,D,SS2
+      INTEGER I,FI
+
+      FI=I
+      IF(FI.LE.0.) THEN
+      SS2=0.
+      RETURN
+      ENDIF
+      IF(FI.LE.C) THEN
+      SS2=0.5*(FI/C)**D
+      RETURN
+      ENDIF
+      IF(FI.LT.2.*C) THEN
+      SS2=1.-0.5*(2.-FI/C)**D
+      RETURN
+      ENDIF
+      SS2=1.
+      ENDFUNCTION
+
+
+
+C**********************************************************************
+      SUBROUTINE DEL(XV,C)
+C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
+C (all ordinates are nul except 2 at max)
+C Inputs:
+C    C: time constant
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,F
+      INTEGER I,K
+      I=INT(C)
+      F=C-INT(C)
+      DO 1 K=3*NPX+1,3*NPX+3*NH
+      XV(K)=0.
+    1 CONTINUE
+      XV(3*NPX+I)=1.-F
+      XV(3*NPX+I+1)=F
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE DEL2(XV,C)
+C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
+C (all ordinates are nul except 2 at max)
+C Inputs:
+C    C: time constant
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,F
+      INTEGER K,I
+      
+      IF(C.GT.FLOAT(NH)) C=FLOAT(NH)
+      I=INT(C)
+      F=C-INT(C)
+      DO 1 K=3*NPX+1,3*NPX+NH
+      XV(K)=0.
+    1 CONTINUE
+      XV(3*NPX+I)=1.-F
+      XV(3*NPX+I+1)=F
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      FUNCTION tanHyp(Val)
+C Computation of hyperbolic tangent
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION Val,ValExp,tanHyp
+
+      ValExp=EXP(Val)
+      tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp)
+      RETURN
+      ENDFUNCTION
+
diff --git a/src-x64/utils.o b/src-x64/utils.o
new file mode 100644
index 0000000000000000000000000000000000000000..2dbfd225923ddd4e69856081f1f330011498a709
GIT binary patch
literal 2944
zcmbVOZ)jUp6u&P?x2(3@bZybOv1R&%*FT0->QJ%UYt7&eD+HXjbv12W8#5`hED4P;
zq%&0(ZLr9cee|RF)giKpr0qyML|pe_f+9}wL#72o1UKer{GEIAZj-Jec;V&#-tYXm
z=bn4c%N>7b8>8{j4#sv%<Y9rtL@FV%`U%%D<}nyMzg@kzV)C=_XkdISF;=Cw6|`A6
z7kDKe-%3`^&5&NI*5Mo!j;ipqs?CCSV5(Lx1?dgwz2;SFdofA9Q?+_F_`%8^lqTtg
z?dL^$EzH{zrk}T+HiIGF7BcN9AIOz>dsmbP^6_wq`<}vsL@);CR{Ws2q+EEQY2~AW
zpZvNYrG%m(Zsou)m-ujA(xqNLm@9>NBp2<4j9avtC0Dbsnn+&`A6w%4X2=D?vG~9>
zir_utPu{-51FLZp!5|=CJ(gdI?}78x5+7W}+tulS6B^uDOY<cjS-^TeuUeT8)lp)k
zjPDCEMsnD%kd+S-1X-i+Yb5;=ACek?Qe(rO4_uLP<tUOzs^gm8;Y6~egSbf!XfN2_
zEMfM-z>Ab}K`9S*{U9>mh|G8Wnf!9dv`}X3NTw(<cQV6fr^xo3R$;DOE-Q}SI}v)Z
zkOG%|#)Z&}8JLxL(}f?yFc#@0L!|$1NnWHB2NAS578!YYDH@Fi{_pye>-Vld2yXNG
z#f|l?|6Kpf+MtUu-gd!ca{kivVMguEntlc5%%B42Od9~1eVnp~BJ%AN8LF|sb^h-A
zp!nMv{EF<P=|>_^St5JbE3)UL>*%~#COf1i=M_(0O%}Uy@D-|q$4DOfvu>3*NPBKz
z3(23kRf)=SqOzQ*EGH^UMJ3K$rhUj9JNZ?C97X|tMaM}2*ZC=c%pbtR*HH|Ap{&=_
zd4so<`AcQlDZQ#{hwh+3269g6-bR3jM0(kqUhhG@-%93h_TcDooEzt<%E{K{^sUHT
zcWOyikjRv%nhMQ#%Vk+YAY>J}Kx{h2pK4A~HY!z-jU77uDf3rf;+^Qg_C=K7idddC
zD2X&=npGkTPB&!x+S7|2;=DM1O*R{E3N6si`d4o+MbWRm#vm*)yU@=I(-HW_8MUv3
zvUYnm-0|G;94wEd3kF$>^lygKzO*25UAcQh_!zQeq14BlJPTN>VbzHrFZI1&^gw*^
zptN_sYXet)|D5l`4%X06KBIC5zD6jagRQG57<>|j>BECLf{%~2C_fAHHN$B2vevU6
z##3%qA9Jy~4~(FJKM+qJW0WMLaXV{_xtaGZPtZN;nli%w!X5Cj1D}}e(en>8^Xx-x
zcWOUtj``Vr#<R?^G#a+C2Kd^3${lo#8dK6gtx;KzLZ{}SF^{JM3N4s}m}7YM0F%+L
zc>KUc%;PBNZsIY2=EjKv=P<W<7@GtRVty0PY2X>mjrd!b0j4ze;h6<iqj*ToH!3r;
zD*|Vlae$h;ZRfoM;C?(Fb_Bn>BpTHy52U2uYwj1#-PNcbyHU0~ft1Bwjlvpzik&Ly
zIQFT~hd>X)lZQpHN5#!*bV(yOcC4hkfRx34&5h^?;EGWtx#7`4^gq)qxdzSoG@^4-
z(g!q0=cT;(wbay{rBSDr1~o@#s%)Ro(x)|NYZTH_I(cQ$uMvv164g=74Qe#3rK6e~
z*C?i?R7cA5ltu|H4Ma~&PT-BkdYQ3Tjb!4)WIPa6l>CjyM)aG({LF<+ZyxdZV^V1z
z0;$8|@h-_w{VOJxR19^2!ze521&8UDR@4y=qgJQBP|Wzmr1Fg8)r@pBqnX6m$=DlH
zBeGMJPW4@rHsCg>gXo62F{<yG2mm@8G6z-PF%i<%I#u^egan;A$6U|VcS{5U9lBl8
jjdEiIs_vC^J#`yYPqky}_30`Cr^6;vbkfcshGO^!%XvXL

literal 0
HcmV?d00001

diff --git a/src/frun_CEMANEIGE.f b/src/frun_CEMANEIGE.f
new file mode 100644
index 00000000..fddc6a5f
--- /dev/null
+++ b/src/frun_CEMANEIGE.f
@@ -0,0 +1,128 @@
+
+
+      SUBROUTINE frun_CEMANEIGE(
+                                 !inputs
+     &                             LInputs              , ! [integer] length of input and output series
+     &                             InputsPrecip         , ! [double]  input series of total precipitation [mm]
+     &                             InputsFracSolidPrecip, ! [double]  input series of fraction of solid precipitation [0-1]
+     &                             InputsTemp           , ! [double]  input series of air mean temperature [degC]
+     &                             MeanAnSolidPrecip    , ! [double]  value of annual mean solid precip [mm/y]
+     &                             NParam               , ! [integer] number of model parameter
+     &                             Param                , ! [double]  parameter set
+     &                             NStates              , ! [integer] number of state variables used for model initialising = 2
+     &                             StateStart           , ! [double]  state variables used when the model run starts
+     &                             NOutputs             , ! [integer] number of output series
+     &                             IndOutputs           , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs              , ! [double]  output series
+     &                             StateEnd             ) ! [double]  state variables at the end of the model run
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_cemaneige
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, intent(in) :: MeanAnSolidPrecip
+      doubleprecision, dimension(LInputs) :: InputsPrecip
+      doubleprecision, dimension(LInputs) :: InputsFracSolidPrecip
+      doubleprecision, dimension(LInputs) :: InputsTemp
+      doubleprecision, dimension(NParam)  :: Param
+      doubleprecision, dimension(NStates) :: StateStart
+      doubleprecision, dimension(NStates) :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      doubleprecision CTG,Kf
+      doubleprecision G,eTG,PliqAndMelt
+      doubleprecision Tmelt,Gthreshold,MinSpeed
+      doubleprecision Pliq,Psol,Gratio,PotMelt,Melt
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation des constantes
+      Tmelt=0
+      Gthreshold=0.9*MeanAnSolidPrecip
+      MinSpeed=0.1
+
+      !initilisation of model states using StateStart
+      G=StateStart(1)
+      eTG=StateStart(2)
+      PliqAndMelt=0
+
+      !setting parameter values
+      CTG=Param(1)
+      Kf=Param(2)
+
+      !initialisation of model outputs
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+
+        !SolidPrecip and LiquidPrecip
+        Pliq=(1-InputsFracSolidPrecip(k))*InputsPrecip(k)
+        Psol=InputsFracSolidPrecip(k)*InputsPrecip(k)
+
+        !Snow pack volume before melt
+        G=G+Psol
+
+        !Snow pack thermal state before melt
+        eTG=CTG*eTG + (1-CTG)*InputsTemp(k)
+        IF(eTG.GT.0) eTG=0
+
+        !Potential melt
+        IF(eTG.EQ.0.AND.InputsTemp(k).GT.Tmelt) THEN
+          PotMelt=Kf*(InputsTemp(k)-Tmelt)
+          IF(PotMelt.GT.G) PotMelt=G
+        ELSE
+          PotMelt=0
+        ENDIF
+
+        !Gratio
+        IF(G.LT.Gthreshold) THEN
+          Gratio=G/Gthreshold
+        ELSE
+          Gratio=1
+        ENDIF
+
+        !Actual melt
+        Melt=((1-MinSpeed)*Gratio+MinSpeed)*PotMelt
+
+        !Update of snow pack volume
+        G=G-Melt
+
+        !Water volume to pass to the hydrological model
+        PliqAndMelt=Pliq+Melt
+
+        !Storage of outputs
+        DO I=1,NOutputs
+          IF(IndOutputs(I).EQ.1) Outputs(k,I)=Pliq
+          IF(IndOutputs(I).EQ.2) Outputs(k,I)=Psol
+          IF(IndOutputs(I).EQ.3) Outputs(k,I)=G
+          IF(IndOutputs(I).EQ.4) Outputs(k,I)=eTG
+          IF(IndOutputs(I).EQ.5) Outputs(k,I)=Gratio
+          IF(IndOutputs(I).EQ.6) Outputs(k,I)=PotMelt
+          IF(IndOutputs(I).EQ.7) Outputs(k,I)=Melt
+          IF(IndOutputs(I).EQ.8) Outputs(k,I)=PliqAndMelt
+        ENDDO
+
+      ENDDO
+
+      StateEnd(1)=G
+      StateEnd(2)=eTG
+
+      RETURN
+
+      ENDSUBROUTINE
+
diff --git a/src/frun_GR4J.f b/src/frun_GR4J.f
new file mode 100644
index 00000000..953e7647
--- /dev/null
+++ b/src/frun_GR4J.f
@@ -0,0 +1,225 @@
+
+
+      SUBROUTINE frun_GR4J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr4j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR4J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR4J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR4J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=4)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3))**3.5
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(14)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src/frun_GR5J.f b/src/frun_GR5J.f
new file mode 100644
index 00000000..4b7b7351
--- /dev/null
+++ b/src/frun_GR5J.f
@@ -0,0 +1,226 @@
+
+
+      SUBROUTINE frun_GR5J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr5j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+      !Param(5) : intercatchment exchange constant (X5 - CES2) [-]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR5J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR5J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR5J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=5)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3)-Param(5))
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(14)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src/frun_GR6J.f b/src/frun_GR6J.f
new file mode 100644
index 00000000..9d7f9373
--- /dev/null
+++ b/src/frun_GR6J.f
@@ -0,0 +1,249 @@
+
+
+      SUBROUTINE frun_GR6J(
+                                 !inputs
+     &                             LInputs      , ! [integer] length of input and output series
+     &                             InputsPrecip , ! [double]  input series of total precipitation [mm]
+     &                             InputsPE     , ! [double]  input series PE [mm]
+     &                             NParam       , ! [integer] number of model parameter
+     &                             Param        , ! [double]  parameter set
+     &                             NStates      , ! [integer] number of state variables used for model initialising
+     &                             StateStart   , ! [double]  state variables used when the model run starts (reservoir levels [mm] and HU)
+     &                             NOutputs     , ! [integer] number of output series
+     &                             IndOutputs   , ! [integer] indices of output series
+                                 !outputs
+     &                             Outputs      , ! [double]  output series
+     &                             StateEnd     ) ! [double]  state variables at the end of the model run  (reservoir levels [mm] and HU)
+
+
+      !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr6j
+
+
+      Implicit None
+      !### input and output variables
+      integer, intent(in) :: LInputs,NParam,NStates,NOutputs
+      doubleprecision, dimension(LInputs)  :: InputsPrecip
+      doubleprecision, dimension(LInputs)  :: InputsPE
+      doubleprecision, dimension(NParam)   :: Param
+      doubleprecision, dimension(NStates)  :: StateStart
+      doubleprecision, dimension(NStates)  :: StateEnd
+      integer, dimension(NOutputs) :: IndOutputs
+      doubleprecision, dimension(LInputs,NOutputs) :: Outputs
+
+      !parameters, internal states and variables
+      integer NPX,NH,NMISC
+      parameter (NPX=14,NH=20,NMISC=30)
+      doubleprecision X(5*NH+7),XV(3*NPX+5*NH)
+      doubleprecision MISC(NMISC)
+      doubleprecision D
+      doubleprecision P1,E,Q
+      integer I,K
+
+      !--------------------------------------------------------------
+      !Initialisations
+      !--------------------------------------------------------------
+
+      !initilisation of model states to zero
+      X=0.
+      XV=0.
+
+      !initilisation of model states using StateStart
+      DO I=1,3*NH
+      X(I)=StateStart(I)
+      ENDDO
+
+      !parameter values
+      !Param(1) : production store capacity (X1 - PROD) [mm]
+      !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d]
+      !Param(3) : routing store capacity (X3 - ROUT) [mm]
+      !Param(4) : time constant of unit hydrograph (X4 - TB) [d]
+      !Param(5) : intercatchment exchange constant (X5 - CES2) [-]
+      !Param(6) : time constant of exponential store (X6 - EXP) [d]
+
+      !computation of HU ordinates
+      D=2.5
+      CALL HU1(XV,Param(4),D)
+      CALL HU2(XV,Param(4),D)
+
+      !initialisation of model outputs
+      Q = -999.999
+      MISC = -999.999
+c      StateEnd = -999.999 !initialisation made in R
+c      Outputs = -999.999  !initialisation made in R
+
+
+
+      !--------------------------------------------------------------
+      !Time loop
+      !--------------------------------------------------------------
+      DO k=1,LInputs
+        P1=InputsPrecip(k)
+        E =InputsPE(k)
+c        Q = -999.999
+c        MISC = -999.999
+        !model run on one time-step
+        CALL MOD_GR6J(X,XV,Param,P1,E,Q,MISC)
+        !storage of outputs
+        DO I=1,NOutputs
+        Outputs(k,I)=MISC(IndOutputs(I))
+        ENDDO
+      ENDDO
+      !model states at the end of the run
+      DO K=1,3*NH
+      StateEnd(K)=X(K)
+      ENDDO
+
+      RETURN
+
+      ENDSUBROUTINE
+
+
+
+
+
+c################################################################################################################################
+
+
+
+
+C**********************************************************************
+      SUBROUTINE MOD_GR6J(X,XV,Param,P1,E,Q,MISC)
+C Run on a single time-step with the GR6J model
+C Inputs:
+C       X      Vector of model states at the beginning of the time-step [mm]
+C       XV     Vector of model states at the beginning of the time-step [mm]
+C       Param  Vector of model parameters [mixed units]
+C       P1     Value of rainfall during the time-step [mm]
+C       E      Value of potential evapotranspiration during the time-step [mm]
+C Outputs:
+C       X      Vector of model states at the end of the time-step [mm]
+C       XV     Vector of model states at the end of the time-step [mm]
+C       Q      Value of simulated flow at the catchment outlet for the time-step [mm]
+C       MISC   Vector of model outputs for the time-step [mm]
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH,NMISC,NParam
+      PARAMETER (NPX=14,NH=20,NMISC=30)
+      PARAMETER (NParam=6)
+      DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH)
+      DOUBLEPRECISION Param(NParam)
+      DOUBLEPRECISION MISC(NMISC)
+      DOUBLEPRECISION P1,E,Q
+      DOUBLEPRECISION A,B,C,EN,ER,PN,PR,PS,WS,tanHyp,AR
+      DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD,QR1
+      DOUBLEPRECISION AE,AEXCH1,AEXCH2
+      INTEGER K
+
+      DATA B/0.9/
+      DATA C/0.4/
+
+      A=Param(1)
+
+
+C Production store
+      IF(P1.LE.E) THEN
+      EN=E-P1
+      PN=0.
+      WS=EN/A
+      IF(WS.GT.13)WS=13.
+      ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
+      AE=ER+P1
+      IF(X(2).LT.ER) AE=X(2)+P1
+      X(2)=X(2)-ER
+      PR=0.
+      ELSE
+      EN=0.
+      AE=E
+      PN=P1-E
+      WS=PN/A
+      IF(WS.GT.13)WS=13.
+      PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
+      PR=PN-PS
+      X(2)=X(2)+PS
+      ENDIF
+
+C Percolation from production store
+      IF(X(2).LT.0.)X(2)=0.
+      PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25))
+      X(2)=X(2)-PERC
+
+      PR=PR+PERC
+
+      PRHU1=PR*B
+      PRHU2=PR*(1.-B)
+
+C Unit hydrograph HU1
+      DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1)))
+      X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1
+      ENDDO
+      X(7+NH)=XV(3*NPX+NH)*PRHU1
+
+C Unit hydrograph HU2
+      DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1)))
+      X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2
+      ENDDO
+      X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2
+
+C Potential intercatchment semi-exchange
+      EXCH=Param(2)*(X(1)/Param(3)-Param(5))
+
+C Routing store
+      AEXCH1=EXCH
+      IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8)
+      X(1)=X(1)+(1-C)*X(8)+EXCH
+      IF(X(1).LT.0.)X(1)=0.
+      QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.))
+      X(1)=X(1)-QR
+
+C Update of exponential store
+      X(6)=X(6)+C*X(8)+EXCH
+      AR=X(6)/Param(6)
+      IF(AR.GT.33.)AR=33.
+      IF(AR.LT.-33.)AR=-33.
+
+      IF(AR.GT.7.)THEN
+      QR1=X(6)+Param(6)/EXP(AR)
+      GOTO 3
+      ENDIF
+
+      IF(AR.LT.-7.)THEN
+      QR1=Param(6)*EXP(AR)
+      GOTO 3
+      ENDIF
+
+      QR1=Param(6)*LOG(EXP(AR)+1.)
+    3 CONTINUE
+
+      X(6)=X(6)-QR1
+
+C Runoff from direct branch QD
+      AEXCH2=EXCH
+      IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH)
+      QD=MAX(0.,X(8+NH)+EXCH)
+
+C Total runoff
+      Q=QR+QD+QR1
+      IF(Q.LT.0.) Q=0.
+
+C Variables storage
+      MISC( 1)=E             ! PE     ! potential evapotranspiration  [mm/d]
+      MISC( 2)=P1            ! Precip ! total precipitation  [mm/d]
+      MISC( 3)=X(2)          ! Prod   ! production store level (X(2)) [mm]
+      MISC( 4)=AE            ! AE     ! actual evapotranspiration [mm/d]
+      MISC( 5)=PERC          ! Perc   ! percolation (PERC) [mm]
+      MISC( 6)=PR            ! PR     ! PR=PN-PS+PERC [mm]
+      MISC( 7)=X(8)          ! Q9     ! outflow from HU1 (Q9) [mm/d]
+      MISC( 8)=X(8+NH)       ! Q1     ! outflow from HU2 (Q1) [mm/d]
+      MISC( 9)=X(1)          ! Rout   ! routing store level (X(1)) [mm]
+      MISC(10)=EXCH          ! Exch   ! potential semi-exchange between catchments (EXCH) [mm/d]
+      MISC(11)=AEXCH1+AEXCH2 ! AExch  ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d]
+      MISC(12)=QR            ! QR     ! outflow from routing store (QR) [mm/d]
+      MISC(13)=QR1           ! QR1    ! outflow from exponential store (QR1) [mm/d]
+      MISC(14)=X(6)          ! Exp    ! exponential store level (X(6)) (negative) [mm]
+      MISC(15)=QD            ! QD     ! outflow from HU2 branch after exchange (QD) [mm/d]
+      MISC(16)=Q             ! Qsim   ! outflow at catchment outlet [mm/d]
+
+
+      ENDSUBROUTINE
+
+
diff --git a/src/utils.f b/src/utils.f
new file mode 100644
index 00000000..2028bc71
--- /dev/null
+++ b/src/utils.f
@@ -0,0 +1,272 @@
+
+
+C**********************************************************************
+      SUBROUTINE HU1(XV,C,D)
+C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1
+C Inputs:
+C    C: time constant
+C    D: exponent
+C Outputs:
+C    XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,D,SS1
+      INTEGER I
+
+      DO I=1,NH
+      XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D)
+      ENDDO
+      ENDSUBROUTINE
+
+
+C**********************************************************************
+      SUBROUTINE HU2(XV,C,D)
+C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2
+C Inputs:
+C    C: time constant
+C    D: exponent
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,D,SS2
+      INTEGER I
+
+      DO I =1,2*NH
+      XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D)
+      ENDDO
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE HU4(XV,ALPHA,BETA)
+C Computation of ordinates of MOHYSE unit hydrograph
+C Inputs:
+C    Alpha: parameter
+C    Beta:  parameter
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH)
+      DOUBLEPRECISION ALPHA,BETA,SU
+      INTEGER K
+
+      SU=0.
+c      IF(ALPHA.LT.1.)THEN  
+c      WRITE(*,*)' Pb ALPHA'
+c      STOP                 
+c      ENDIF                
+      IF(ALPHA.EQ.1.)THEN
+      U(1)=1.
+      SU=1.
+      DO 1 K=2,3*NH
+      U(K)=0.
+    1 CONTINUE
+      ELSE
+      DO 11 K=1,3*NH
+      U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA)
+      SU=SU+U(K)
+   11 CONTINUE
+      ENDIF
+
+c      IF(SU.LT.0.0000000001)THEN       
+c      WRITE(*,*)' Pb HU4',ALPHA, BETA  
+c      STOP                             
+c      ENDIF                            
+      DO 2 K=1,3*NH
+      XV(3*NPX+K)=U(K)/SU
+    2 CONTINUE
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE HU(XV,C)
+C Computation of ordinates of GRP unit hydrograph
+C Inputs:
+C    C: time constant
+C    Alpha: parameter
+C    Beta:  parameter
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C
+      DOUBLEPRECISION SH
+      INTEGER I
+      DO 10 I=1,2*NH
+      XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C)
+   10 CONTINUE
+      RETURN
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      FUNCTION SH(I,C)
+C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU
+C Inputs:
+C    C: time constant
+C    I: time-step
+C Outputs:
+C    SH: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION C
+      DOUBLEPRECISION SH,FI
+      INTEGER I
+      
+      FI=I
+      IF(FI.LE.0.)THEN
+      SH=0.
+      RETURN
+      ENDIF
+      IF(FI.GE.C)THEN
+      SH=1.
+      RETURN
+      ENDIF
+      SH=FI**2.5/(FI**2.5+(C-FI)**2.5)
+      RETURN
+      ENDFUNCTION
+
+
+C**********************************************************************
+      FUNCTION SS1(I,C,D)
+C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1
+C Inputs:
+C    C: time constant
+C    D: exponent
+C    I: time-step
+C Outputs:
+C    SS1: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION C,D,SS1
+      INTEGER I,FI
+
+      FI=I
+      IF(FI.LE.0.) THEN
+      SS1=0.
+      RETURN
+      ENDIF
+      IF(FI.LT.C) THEN
+      SS1=(FI/C)**D
+      RETURN
+      ENDIF
+      SS1=1.
+      ENDFUNCTION
+
+
+C**********************************************************************
+      FUNCTION SS2(I,C,D)
+C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2
+C Inputs:
+C    C: time constant
+C    D: exponent
+C    I: time-step
+C Outputs:
+C    SS2: Values of the S curve for I
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION C,D,SS2
+      INTEGER I,FI
+
+      FI=I
+      IF(FI.LE.0.) THEN
+      SS2=0.
+      RETURN
+      ENDIF
+      IF(FI.LE.C) THEN
+      SS2=0.5*(FI/C)**D
+      RETURN
+      ENDIF
+      IF(FI.LT.2.*C) THEN
+      SS2=1.-0.5*(2.-FI/C)**D
+      RETURN
+      ENDIF
+      SS2=1.
+      ENDFUNCTION
+
+
+
+C**********************************************************************
+      SUBROUTINE DEL(XV,C)
+C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
+C (all ordinates are nul except 2 at max)
+C Inputs:
+C    C: time constant
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,F
+      INTEGER I,K
+      I=INT(C)
+      F=C-INT(C)
+      DO 1 K=3*NPX+1,3*NPX+3*NH
+      XV(K)=0.
+    1 CONTINUE
+      XV(3*NPX+I)=1.-F
+      XV(3*NPX+I+1)=F
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      SUBROUTINE DEL2(XV,C)
+C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
+C (all ordinates are nul except 2 at max)
+C Inputs:
+C    C: time constant
+C Outputs:
+C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph
+C**********************************************************************
+      Implicit None
+      INTEGER NPX,NH
+      PARAMETER (NPX=14,NH=20)
+      DOUBLEPRECISION XV(3*NPX+5*NH)
+      DOUBLEPRECISION C,F
+      INTEGER K,I
+      
+      IF(C.GT.FLOAT(NH)) C=FLOAT(NH)
+      I=INT(C)
+      F=C-INT(C)
+      DO 1 K=3*NPX+1,3*NPX+NH
+      XV(K)=0.
+    1 CONTINUE
+      XV(3*NPX+I)=1.-F
+      XV(3*NPX+I+1)=F
+      ENDSUBROUTINE
+
+
+
+C**********************************************************************
+      FUNCTION tanHyp(Val)
+C Computation of hyperbolic tangent
+C**********************************************************************
+      Implicit None
+      DOUBLEPRECISION Val,ValExp,tanHyp
+
+      ValExp=EXP(Val)
+      tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp)
+      RETURN
+      ENDFUNCTION
+
diff --git a/tests/example_Calibration.R b/tests/example_Calibration.R
new file mode 100644
index 00000000..d95410ed
--- /dev/null
+++ b/tests/example_Calibration.R
@@ -0,0 +1,47 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## calibration period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## calibration criterion: preparation of the InputsCrit object
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+
+## preparation of CalibOptions object
+CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN)
+
+## calibration
+OutputsCalib <- Calibration(InputsModel=InputsModel,RunOptions=RunOptions,InputsCrit=InputsCrit,
+                            CalibOptions=CalibOptions,FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE,
+                            FUN_CALIB=Calibration_HBAN)
+
+## simulation
+Param <- OutputsCalib$ParamFinalR
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
+
diff --git a/tests/example_Calibration_HBAN.R b/tests/example_Calibration_HBAN.R
new file mode 100644
index 00000000..75b7832f
--- /dev/null
+++ b/tests/example_Calibration_HBAN.R
@@ -0,0 +1,46 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## calibration period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## calibration criterion: preparation of the InputsCrit object
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+
+## preparation of CalibOptions object
+CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN)
+
+## calibration
+OutputsCalib <- Calibration_HBAN(InputsModel=InputsModel,RunOptions=RunOptions,
+                                 InputsCrit=InputsCrit,CalibOptions=CalibOptions,
+                                 FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE)
+
+## simulation
+Param <- OutputsCalib$ParamFinalR
+OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_Calibration_optim.R b/tests/example_Calibration_optim.R
new file mode 100644
index 00000000..f08ec410
--- /dev/null
+++ b/tests/example_Calibration_optim.R
@@ -0,0 +1,45 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## calibration period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## calibration criterion: preparation of the InputsCrit object
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+
+## preparation of CalibOptions object
+CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_optim)
+
+## calibration
+OutputsCalib <- Calibration_optim(InputsModel=InputsModel,RunOptions=RunOptions,
+                                  InputsCrit=InputsCrit,CalibOptions=CalibOptions,
+                                  FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE)
+
+## simulation
+Param <- OutputsCalib$ParamFinalR
+OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
diff --git a/tests/example_ErrorCrit.R b/tests/example_ErrorCrit.R
new file mode 100644
index 00000000..db241e83
--- /dev/null
+++ b/tests/example_ErrorCrit.R
@@ -0,0 +1,60 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J)
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
+## efficiency criterion: Nash-Sutcliffe Efficiency on log-transformed flows
+transfo <- "log"
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],transfo=transfo)
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
+## efficiency criterion: Nash-Sutcliffe Efficiency above a threshold (q75%)
+BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); 
+BoolCrit[BasinObs$Qmm[Ind_Run]<quantile(BasinObs$Qmm[Ind_Run],0.75,na.rm=TRUE)] <- FALSE;
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit)
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,
+                               RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+cat(paste("SubCrit  ",OutputsCrit$SubCritNames,"  ",round(OutputsCrit$SubCritValues,4),"\n",sep=""))
+
+## efficiency criterion: Kling-Gupta Efficiency below a threshold (q10%) on log-trqansformed flows
+transfo  <- "log"
+BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); 
+BoolCrit[BasinObs$Qmm[Ind_Run]>quantile(BasinObs$Qmm[Ind_Run],0.10,na.rm=TRUE)] <- FALSE;
+InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,RunOptions=RunOptions,
+                               Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit,transfo=transfo)
+OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+cat(paste("SubCrit  ",OutputsCrit$SubCritNames,"  ",round(OutputsCrit$SubCritValues,4),"\n",sep=""))
+
+
+
+
diff --git a/tests/example_RunModel.R b/tests/example_RunModel.R
new file mode 100644
index 00000000..b240b8cf
--- /dev/null
+++ b/tests/example_RunModel.R
@@ -0,0 +1,29 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,
+                         FUN_MOD=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_RunModel_CemaNeige.R b/tests/example_RunModel_CemaNeige.R
new file mode 100644
index 00000000..e2218fbd
--- /dev/null
+++ b/tests/example_RunModel_CemaNeige.R
@@ -0,0 +1,25 @@
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeige,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,TempMean=BasinObs$T,
+                                 ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve,
+                                 NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeige,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(0.962,2.249)
+OutputsModel <- RunModel_CemaNeige(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel)
+
diff --git a/tests/example_RunModel_CemaNeigeGR4J.R b/tests/example_RunModel_CemaNeigeGR4J.R
new file mode 100644
index 00000000..fcbc2488
--- /dev/null
+++ b/tests/example_RunModel_CemaNeigeGR4J.R
@@ -0,0 +1,31 @@
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T,
+                                 ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve,
+                                 NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR4J,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(408.774,2.646,131.264,1.174,0.962,2.249)
+OutputsModel <- RunModel_CemaNeigeGR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_RunModel_CemaNeigeGR5J.R b/tests/example_RunModel_CemaNeigeGR5J.R
new file mode 100644
index 00000000..9e449527
--- /dev/null
+++ b/tests/example_RunModel_CemaNeigeGR5J.R
@@ -0,0 +1,31 @@
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR5J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T,
+                                 ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve,
+                                 NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR5J,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(179.139,-0.100,203.815,1.174,2.478,0.977,2.774)
+OutputsModel <- RunModel_CemaNeigeGR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_RunModel_CemaNeigeGR6J.R b/tests/example_RunModel_CemaNeigeGR6J.R
new file mode 100644
index 00000000..d381ff51
--- /dev/null
+++ b/tests/example_RunModel_CemaNeigeGR6J.R
@@ -0,0 +1,31 @@
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR6J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T,
+                                 ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve,
+                                 NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR6J,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(116.482,0.500,72.733,1.224,0.278,30.333,0.977,2.776)
+OutputsModel <- RunModel_CemaNeigeGR6J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_RunModel_GR4J.R b/tests/example_RunModel_GR4J.R
new file mode 100644
index 00000000..fe8acc49
--- /dev/null
+++ b/tests/example_RunModel_GR4J.R
@@ -0,0 +1,28 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_RunModel_GR5J.R b/tests/example_RunModel_GR5J.R
new file mode 100644
index 00000000..62e535fe
--- /dev/null
+++ b/tests/example_RunModel_GR5J.R
@@ -0,0 +1,28 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR5J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR5J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(839.661,-0.100,103.153,1.939,-0.428)
+OutputsModel <- RunModel_GR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_RunModel_GR6J.R b/tests/example_RunModel_GR6J.R
new file mode 100644
index 00000000..2bdc4e0d
--- /dev/null
+++ b/tests/example_RunModel_GR6J.R
@@ -0,0 +1,28 @@
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR6J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR6J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(347.000,-0.500,65.677,1.957,0.324,34.115)
+OutputsModel <- RunModel_GR6J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+## efficiency criterion: Nash-Sutcliffe Efficiency
+InputsCrit  <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel,
+                                RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run])
+OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel)
+cat(paste("  Crit  ",OutputsCrit$CritName,"  ",round(OutputsCrit$CritValue,4),"\n",sep=""))
+
diff --git a/tests/example_TransfoParam.R b/tests/example_TransfoParam.R
new file mode 100644
index 00000000..0c5c5037
--- /dev/null
+++ b/tests/example_TransfoParam.R
@@ -0,0 +1,15 @@
+require(airGR)
+
+## transformation Real->Transformed for the GR4J model
+    Xreal <- matrix( c( 221.41, -3.63,  30.00, 1.37,
+                        347.23, -1.03,  60.34, 1.76,
+                        854.06, -0.10, 148.41, 2.34),
+                        ncol=4,byrow=TRUE)
+    Xtran <- TransfoParam(ParamIn=Xreal,Direction="RT",FUN_TRANSFO=TransfoParam_GR4J)
+
+## transformation Transformed->Real for the GR4J model
+    Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10,
+                        +3.90, -0.90, +4.10, -8.70,
+                        +4.50, -0.10, +5.00, -8.10),
+                        ncol=4,byrow=TRUE)
+    Xreal <- TransfoParam(ParamIn=Xtran,Direction="TR",FUN_TRANSFO=TransfoParam_GR4J)
diff --git a/tests/example_TransfoParam_CemaNeige.R b/tests/example_TransfoParam_CemaNeige.R
new file mode 100644
index 00000000..85efecfc
--- /dev/null
+++ b/tests/example_TransfoParam_CemaNeige.R
@@ -0,0 +1,15 @@
+require(airGR)
+
+## transformation Real->Transformed for the CemaNeige module
+    Xreal <- matrix( c( 0.19, 1.73,
+                        0.39, 2.51,
+                        0.74, 4.06),
+                        ncol=2,byrow=TRUE)
+    Xtran <- TransfoParam_CemaNeige(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the CemaNeige module
+    Xtran <- matrix( c( -6.26, +0.55,
+                        -2.13, +0.92,
+                        +4.86, +1.40)
+                        ,ncol=2,byrow=TRUE)
+    Xreal <- TransfoParam_CemaNeige(ParamIn=Xtran,Direction="TR")
diff --git a/tests/example_TransfoParam_GR4J.R b/tests/example_TransfoParam_GR4J.R
new file mode 100644
index 00000000..61019033
--- /dev/null
+++ b/tests/example_TransfoParam_GR4J.R
@@ -0,0 +1,15 @@
+require(airGR)
+
+## transformation Real->Transformed for the GR4J model
+    Xreal <- matrix( c( 221.41, -3.63,  30.00, 1.37,
+                        347.23, -1.03,  60.34, 1.76,
+                        854.06, -0.10, 148.41, 2.34),
+                        ncol=4,byrow=TRUE)
+    Xtran <- TransfoParam_GR4J(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the GR4J model
+    Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10,
+                        +3.90, -0.90, +4.10, -8.70,
+                        +4.50, -0.10, +5.00, -8.10),
+                        ncol=4,byrow=TRUE)
+    Xreal <- TransfoParam_GR4J(ParamIn=Xtran,Direction="TR")
diff --git a/tests/example_TransfoParam_GR5J.R b/tests/example_TransfoParam_GR5J.R
new file mode 100644
index 00000000..b2361f3a
--- /dev/null
+++ b/tests/example_TransfoParam_GR5J.R
@@ -0,0 +1,15 @@
+require(airGR)
+
+## transformation Real->Transformed for the GR5J model
+    Xreal <- matrix( c( 221.41, -2.65,  27.11, 1.37, -0.76,
+                        347.23, -0.64,  60.34, 1.76,  0.30,
+                        854.01, -0.10, 148.41, 2.34,  0.52),
+                        ncol=5,byrow=TRUE)
+    Xtran <- TransfoParam_GR5J(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the GR5J model
+    Xtran <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70,
+                        +3.90, -0.60, +4.10, -8.70, +0.30,
+                        +4.50, -0.10, +5.00, -8.10, +0.50),
+                        ncol=5,byrow=TRUE)
+    Xreal <- TransfoParam_GR5J(ParamIn=Xtran,Direction="TR")
diff --git a/tests/example_TransfoParam_GR6J.R b/tests/example_TransfoParam_GR6J.R
new file mode 100644
index 00000000..1bd48fa4
--- /dev/null
+++ b/tests/example_TransfoParam_GR6J.R
@@ -0,0 +1,15 @@
+require(airGR)
+
+## transformation Real->Transformed for the GR6J model
+    Xreal <- matrix( c( 221.41, -1.18,  27.11, 1.37, -0.18,  20.09,
+                        347.23, -0.52,  60.34, 1.76,  0.02,  54.60,
+                        854.06,  0.52, 148.41, 2.34,  0.22, 148.41),
+                        ncol=6,byrow=TRUE)
+    Xtran <- TransfoParam_GR6J(ParamIn=Xreal,Direction="RT")
+
+## transformation Transformed->Real for the GR6J model
+    Xtran <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00,
+                        +3.90, -0.50, +4.10, -8.70, +0.10, +4.00,
+                        +4.50, +0.50, +5.00, -8.10, +1.10, +5.00),
+                        ncol=6,byrow=TRUE)
+    Xreal <- TransfoParam_GR6J(ParamIn=Xtran,Direction="TR")
diff --git a/tests/example_plot_OutputsModel.R b/tests/example_plot_OutputsModel.R
new file mode 100644
index 00000000..f2df3057
--- /dev/null
+++ b/tests/example_plot_OutputsModel.R
@@ -0,0 +1,54 @@
+#### example 1 without snow module
+
+## load of catchment data
+require(airGR)
+data(L0123001)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(734.568,-0.840,109.809,1.971)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,
+                         FUN_MOD=RunModel_GR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+
+#### example 2 with snow module
+
+## load of catchment data
+require(airGR)
+data(L0123002)
+
+## preparation of the InputsModel object
+InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR4J,DatesR=BasinObs$DatesR,
+                                 Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T,
+                                 HypsoData=BasinInfo$HypsoCurve,NLayers=5)
+
+## run period selection
+Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"),
+               which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00"))
+
+## preparation of the RunOptions object
+RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR4J,InputsModel=InputsModel,
+                               IndPeriod_Run=Ind_Run)
+
+## simulation
+Param <- c(408.774,2.646,131.264,1.174,0.962,2.249)
+OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,
+                         FUN_MOD=RunModel_CemaNeigeGR4J)
+
+## results preview
+plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run])
+
+
-- 
GitLab