47                           n_ax,n_bx,alpha_x,c_x,d_x,g_x,a_x,b_x,gamma1,gamma2, &
 
   51     integer,
intent(in) :: Npoints,Nlevels,Ncolumns
 
   52     real,
intent(in),
dimension(Npoints,Nlevels) :: p,T,flux
 
   53     real,
intent(in),
dimension(Npoints,Ncolumns,Nlevels) :: prec_frac
 
   54     real,
intent(in) :: n_ax,n_bx,alpha_x,c_x,d_x,g_x,a_x,b_x,gamma1,gamma2,prec_type
 
   56     real,
intent(out),
dimension(Npoints,Ncolumns,Nlevels) :: mxratio
 
   59     real :: sigma,one_over_xip1,xi,rho0,rho
 
   66         xi      = d_x/(alpha_x + b_x - n_bx + 1.0)
 
   68         sigma   = (gamma2/(gamma1*c_x))*(n_ax*a_x*gamma2)**xi
 
   69         one_over_xip1 = 1.0/(xi + 1.0)
 
   74                     if ((prec_frac(i,j,k)==prec_type).or.(prec_frac(i,j,k)==3.)) 
then 
   75                         rho = p(i,k)/(287.05*t(i,k))
 
   76                         mxratio(i,j,k)=(flux(i,k)*((rho/rho0)**g_x)*sigma)**one_over_xip1
 
   77                         mxratio(i,j,k)=mxratio(i,j,k)/rho
 
   89 ELEMENTAL SUBROUTINE zero_int(x,y01,y02,y03,y04,y05,y06,y07,y08,y09,y10, &
 
   90                                  y11,y12,y13,y14,y15,y16,y17,y18,y19,y20, &
 
   91                                  y21,y22,y23,y24,y25,y26,y27,y28,y29,y30)
 
   93   integer,
intent(inout) :: x
 
   94   integer,
intent(inout),
optional :: y01,y02,y03,y04,y05,y06,y07,y08,y09,y10, &
 
   95                                     y11,y12,y13,y14,y15,y16,y17,y18,y19,y20, &
 
   96                                     y21,y22,y23,y24,y25,y26,y27,y28,y29,y30
 
   98   if (
present(y01)) y01 = 0
 
   99   if (
present(y02)) y02 = 0
 
  100   if (
present(y03)) y03 = 0
 
  101   if (
present(y04)) y04 = 0
 
  102   if (
present(y05)) y05 = 0
 
  103   if (
present(y06)) y06 = 0
 
  104   if (
present(y07)) y07 = 0
 
  105   if (
present(y08)) y08 = 0
 
  106   if (
present(y09)) y09 = 0
 
  107   if (
present(y10)) y10 = 0
 
  108   if (
present(y11)) y11 = 0
 
  109   if (
present(y12)) y12 = 0
 
  110   if (
present(y13)) y13 = 0
 
  111   if (
present(y14)) y14 = 0
 
  112   if (
present(y15)) y15 = 0
 
  113   if (
present(y16)) y16 = 0
 
  114   if (
present(y17)) y17 = 0
 
  115   if (
present(y18)) y18 = 0
 
  116   if (
present(y19)) y19 = 0
 
  117   if (
present(y20)) y20 = 0
 
  118   if (
present(y21)) y21 = 0
 
  119   if (
present(y22)) y22 = 0
 
  120   if (
present(y23)) y23 = 0
 
  121   if (
present(y24)) y24 = 0
 
  122   if (
present(y25)) y25 = 0
 
  123   if (
present(y26)) y26 = 0
 
  124   if (
present(y27)) y27 = 0
 
  125   if (
present(y28)) y28 = 0
 
  126   if (
present(y29)) y29 = 0
 
  127   if (
present(y30)) y30 = 0
 
  133 ELEMENTAL SUBROUTINE zero_real(x,y01,y02,y03,y04,y05,y06,y07,y08,y09,y10, &
 
  134                                  y11,y12,y13,y14,y15,y16,y17,y18,y19,y20, &
 
  135                                  y21,y22,y23,y24,y25,y26,y27,y28,y29,y30)
 
  137   real,
intent(inout) :: x
 
  138   real,
intent(inout),
optional :: y01,y02,y03,y04,y05,y06,y07,y08,y09,y10, &
 
  139                                  y11,y12,y13,y14,y15,y16,y17,y18,y19,y20, &
 
  140                                  y21,y22,y23,y24,y25,y26,y27,y28,y29,y30
 
  142   if (
present(y01)) y01 = 0.0
 
  143   if (
present(y02)) y02 = 0.0
 
  144   if (
present(y03)) y03 = 0.0
 
  145   if (
present(y04)) y04 = 0.0
 
  146   if (
present(y05)) y05 = 0.0
 
  147   if (
present(y06)) y06 = 0.0
 
  148   if (
present(y07)) y07 = 0.0
 
  149   if (
present(y08)) y08 = 0.0
 
  150   if (
present(y09)) y09 = 0.0
 
  151   if (
present(y10)) y10 = 0.0
 
  152   if (
present(y11)) y11 = 0.0
 
  153   if (
present(y12)) y12 = 0.0
 
  154   if (
present(y13)) y13 = 0.0
 
  155   if (
present(y14)) y14 = 0.0
 
  156   if (
present(y15)) y15 = 0.0
 
  157   if (
present(y16)) y16 = 0.0
 
  158   if (
present(y17)) y17 = 0.0
 
  159   if (
present(y18)) y18 = 0.0
 
  160   if (
present(y19)) y19 = 0.0
 
  161   if (
present(y20)) y20 = 0.0
 
  162   if (
present(y21)) y21 = 0.0
 
  163   if (
present(y22)) y22 = 0.0
 
  164   if (
present(y23)) y23 = 0.0
 
  165   if (
present(y24)) y24 = 0.0
 
  166   if (
present(y25)) y25 = 0.0
 
  167   if (
present(y26)) y26 = 0.0
 
  168   if (
present(y27)) y27 = 0.0
 
  169   if (
present(y28)) y28 = 0.0
 
  170   if (
present(y29)) y29 = 0.0
 
  171   if (
present(y30)) y30 = 0.0
 
  178     real,
intent(in) :: mdi
 
  179     real,
dimension(:,:),
intent(inout) :: z
 
  196     real,
intent(in) :: mdi
 
  197     real,
dimension(:,:,:),
intent(inout) :: z
 
  214     real,
intent(in) :: mdi
 
  215     real,
dimension(:,:,:,:),
intent(inout) :: z
 
  233     character(len=*) :: vname
 
  234     real,
intent(inout) :: x(:)
 
  235     real,
intent(in),
optional :: min_val,max_val
 
  236     logical :: l_min,l_max
 
  237     character(len=128) :: pro_name=
'COSP_CHECK_INPUT_1D' 
  242     if (
present(min_val)) 
then 
  244       if (any(x < min_val)) 
then  
  251     if (
present(max_val)) 
then 
  253       if (any(x > max_val)) 
then  
  261     if (l_min) print *,
'----- WARNING: '//trim(pro_name)//
': minimum value of '//trim(vname)//
' set to: ',min_val
 
  262     if (l_max) print *,
'----- WARNING: '//trim(pro_name)//
': maximum value of '//trim(vname)//
' set to: ',max_val
 
  268     character(len=*) :: vname
 
  269     real,
intent(inout) :: x(:,:)
 
  270     real,
intent(in),
optional :: min_val,max_val
 
  271     logical :: l_min,l_max
 
  272     character(len=128) :: pro_name=
'COSP_CHECK_INPUT_2D' 
  277     if (
present(min_val)) 
then 
  279       if (any(x < min_val)) 
then  
  286     if (
present(max_val)) 
then 
  288       if (any(x > max_val)) 
then  
  296     if (l_min) print *,
'----- WARNING: '//trim(pro_name)//
': minimum value of '//trim(vname)//
' set to: ',min_val
 
  297     if (l_max) print *,
'----- WARNING: '//trim(pro_name)//
': maximum value of '//trim(vname)//
' set to: ',max_val
 
  303     character(len=*) :: vname
 
  304     real,
intent(inout) :: x(:,:,:)
 
  305     real,
intent(in),
optional :: min_val,max_val
 
  306     logical :: l_min,l_max
 
  307     character(len=128) :: pro_name=
'COSP_CHECK_INPUT_3D' 
  312     if (
present(min_val)) 
then 
  314       if (any(x < min_val)) 
then  
  321     if (
present(max_val)) 
then 
  323       if (any(x > max_val)) 
then  
  331     if (l_min) print *,
'----- WARNING: '//trim(pro_name)//
': minimum value of '//trim(vname)//
' set to: ',min_val
 
  332     if (l_max) print *,
'----- WARNING: '//trim(pro_name)//
': maximum value of '//trim(vname)//
' set to: ',max_val
 
subroutine cosp_check_input_3d(vname, x, min_val, max_val)
 
subroutine cosp_check_input_2d(vname, x, min_val, max_val)
 
elemental subroutine zero_int(x, y01, y02, y03, y04, y05, y06, y07, y08, y09, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29, y30)
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
 
subroutine cosp_check_input_1d(vname, x, min_val, max_val)
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
 
subroutine z_to_dbz_3d(mdi, z)
 
subroutine cosp_precip_mxratio(Npoints, Nlevels, Ncolumns, p, T, prec_frac, prec_type, n_ax, n_bx, alpha_x, c_x, d_x, g_x, a_x, b_x, gamma1, gamma2, flux, mxratio)
 
subroutine z_to_dbz_2d(mdi, z)
 
elemental subroutine zero_real(x, y01, y02, y03, y04, y05, y06, y07, y08, y09, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29, y30)
 
subroutine z_to_dbz_4d(mdi, z)