Index: trunk/LMDZ.TITAN/libf/muphytitan/mmp_gcm.f90
===================================================================
--- trunk/LMDZ.TITAN/libf/muphytitan/mmp_gcm.f90	(revision 1793)
+++ trunk/LMDZ.TITAN/libf/muphytitan/mmp_gcm.f90	(revision 1819)
@@ -27,4 +27,29 @@
     REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE :: c
   END TYPE
+
+  !> Size distribution parameters derived type.
+  !!
+  !! It stores the parameters of the size distribution law for Titan.
+  !! 
+  !! The size distribution law is represented by the minimization of a sum of
+  !! power law functions:
+  !!
+  !! $$ 
+  !! \displaystyle n\left(r\right) = \frac{A_{0}}{C+\sum_{i=1}^{n} A_{i}\times
+  !!                                    \left(\frac{r}{r_{c}}\right)^{-b_{i}}}
+  !! $$
+  TYPE, PUBLIC :: nprm
+    !> Scaling factor.
+    REAL(kind=mm_wp)                            :: a0
+    !> Characterisitic radius.
+    REAL(kind=mm_wp)                            :: rc
+    !> Additional constant to the sum of power law.
+    REAL(kind=mm_wp)                            :: c
+    !> Scaling factor of each power law.
+    REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE :: a
+    !> Power of each power law.
+    REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE :: b
+  END TYPE 
+
   !> Inter-moment relation set of parameters for the spherical mode.
   TYPE(aprm), PUBLIC, SAVE :: mmp_asp
@@ -32,15 +57,20 @@
   TYPE(aprm), PUBLIC, SAVE :: mmp_afp
 
+  !> Size-distribution law parameters of the spherical mode.
+  TYPE(nprm), PUBLIC, SAVE :: mmp_pns
+  !> Size-distribution law parameters of the fractal mode.
+  TYPE(nprm), PUBLIC, SAVE :: mmp_pnf
+
   !> Data set for @f$<Q>_{SF}^{M0}@f$.
   TYPE(dset2d), PUBLIC, SAVE, TARGET             :: mmp_qbsf0
-  !> Extended values of [[mmp_globals(module):mmp_qbsf0(variable)]] dataset.
+  !> Extended values of [[mmp_gcm(module):mmp_qbsf0(variable)]] dataset.
   REAL(kind=mm_wp), PUBLIC, SAVE, DIMENSION(2,2) :: mmp_qbsf0_e
   !> Data set for @f$<Q>_{SF}^{M3}@f$.
   TYPE(dset2d), PUBLIC, SAVE, TARGET             :: mmp_qbsf3
-  !> Extended values of [[mmp_globals(module):mmp_qbsf3(variable)]] dataset.
+  !> Extended values of [[mmp_gcm(module):mmp_qbsf3(variable)]] dataset.
   REAL(kind=mm_wp), PUBLIC, SAVE, DIMENSION(2,2) :: mmp_qbsf3_e
   !> Data set for @f$<Q>_{FF}^{M0}@f$.
   TYPE(dset2d), PUBLIC, SAVE, TARGET             :: mmp_qbff0
-  !> Extended values of [[mmp_globals(module):mmp_qbff0(variable)]] dataset.
+  !> Extended values of [[mmp_gcm(module):mmp_qbff0(variable)]] dataset.
   REAL(kind=mm_wp), PUBLIC, SAVE, DIMENSION(2,2) :: mmp_qbff0_e
   
@@ -247,4 +277,13 @@
     err = read_aprm(cparser,'alpha_f',mmp_afp)
     IF (err /= 0) call abort_program(error("alpha_s: "//TRIM(err%msg),-1))
+
+    ! get size-distribution laws parameters
+    IF (.NOT.cfg_has_section(cparser,'dndr_s')) call abort_program(error("Cannot find [dndr_s] section",-2))
+    err = read_nprm(cparser,'dndr_s',mmp_pns)
+    IF (err /= 0) call abort_program(error("dndr_s: "//TRIM(err%msg),-2))
+    IF (.NOT.cfg_has_section(cparser,'dndr_f')) call abort_program(error("Cannot find [dndr_f] section",-2))
+    err = read_nprm(cparser,'dndr_f',mmp_pnf)
+    IF (err /= 0) call abort_program(error("dndr_f: "//TRIM(err%msg),-2))
+
     ! btk coefficients
     IF (.NOT.cfg_has_section(cparser,'btks')) call abort_program(error("Cannot find [btks] section",-1))
@@ -265,8 +304,8 @@
 
   FUNCTION read_aprm(parser,sec,pp) RESULT(err)
-    !! Read and store [[mmp_globals(module):aprm(type)]] parameters. 
+    !! Read and store [[mmp_gcm(module):aprm(type)]] parameters. 
     TYPE(cfgparser), INTENT(in)  :: parser !! Configuration parser 
     CHARACTER(len=*), INTENT(in) :: sec    !! Name of the section that contains the parameters.
-    TYPE(aprm), INTENT(out)      :: pp     !! [[mmp_globals(module):aprm(type)]] object that stores the parameters values.
+    TYPE(aprm), INTENT(out)      :: pp     !! [[mmp_gcm(module):aprm(type)]] object that stores the parameters values.
     TYPE(error) :: err                     !! Error status of the function.
     err = cfg_get_value(parser,TRIM(sec)//'/a',pp%a) ; IF (err /= 0) RETURN
@@ -278,4 +317,20 @@
   END FUNCTION read_aprm
 
+  FUNCTION read_nprm(parser,sec,pp) RESULT(err)
+    !! Read and store [[mmp_gcm(module):nprm(type)]] parameters.
+    TYPE(cfgparser), INTENT(in)  :: parser !! Configuration parser 
+    CHARACTER(len=*), INTENT(in) :: sec    !! Name of the section that contains the parameters.
+    TYPE(nprm), INTENT(out)      :: pp     !! [[mmp_gcm(module):nprm(type)]] object that stores the parameters values.
+    TYPE(error) :: err                     !! Error status of the function.
+    err = cfg_get_value(parser,TRIM(sec)//'/rc',pp%rc) ; IF (err /= 0) RETURN
+    err = cfg_get_value(parser,TRIM(sec)//'/a0',pp%a0) ; IF (err /= 0) RETURN
+    err = cfg_get_value(parser,TRIM(sec)//'/c',pp%c)   ; IF (err /= 0) RETURN
+    err = cfg_get_value(parser,TRIM(sec)//'/a',pp%a)   ; IF (err /= 0) RETURN
+    err = cfg_get_value(parser,TRIM(sec)//'/b',pp%b)   ; IF (err /= 0) RETURN
+    IF (SIZE(pp%a) /= SIZE(pp%b)) &
+      err = error("Inconsistent number of coefficients (a and b must have the same size)",3)
+    RETURN
+  END FUNCTION read_nprm
+
 END MODULE MMP_GCM
 
