Index: /trunk/LMDZ.GENERIC/libf/phystd/aeropacity.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/aeropacity.F90	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/aeropacity.F90	(revision 1677)
@@ -5,9 +5,11 @@
        use aerosol_mod
        USE tracer_h, only: noms,rho_co2,rho_ice
-       use comcstfi_mod, only: g
+       use comcstfi_mod, only: g, pi
+       use geometry_mod, only: latitude
        use callkeys_mod, only: aerofixco2,aerofixh2o,kastprof,cloudlvl,	&
 		CLFvarying,CLFfixval,dusttau,			 	&
 		pres_bottom_tropo,pres_top_tropo,obs_tau_col_tropo,	&
-		pres_bottom_strato,pres_top_strato,obs_tau_col_strato
+		pres_bottom_strato,pres_top_strato,obs_tau_col_strato,  &
+                tau_nh3_cloud, pres_nh3_cloud 
                   
        implicit none
@@ -60,5 +62,5 @@
       logical,intent(in) :: clearsky
 
-      real aerosol0
+      real aerosol0, obs_tau_col_aurora, pm, pente_cloud
 
       INTEGER l,ig,iq,iaer
@@ -121,4 +123,10 @@
         if (iaero_back2lay.ne.0) then
           print*,'iaero_back2lay= ',iaero_back2lay
+        endif
+        if (iaero_nh3.ne.0) then
+          print*,'iaero_nh3= ',iaero_nh3
+        endif
+        if (iaero_aurora.ne.0) then
+          print*,'iaero_aurora= ',iaero_aurora
         endif
 
@@ -409,4 +417,103 @@
       end if ! if Two-layer aerosols  
 
+!==================================================================
+!    Saturn/Jupiter ammonia cloud = thin cloud (scale height 0.2 hard coded...)
+!    S. Guerlet (2013)
+!==================================================================
+
+      if (iaero_nh3 .ne.0) then
+           iaer=iaero_nh3
+!       1. Initialization
+            aerosol(1:ngrid,1:nlayer,iaer)=0.D0
+!       2. Opacity calculation
+          DO ig=1,ngrid
+
+           DO l=1,nlayer-1
+            !! 1. below cloud layer: no opacity
+	    
+            IF (pplev(ig,l) .gt. pres_nh3_cloud ) THEN
+            aerosol(ig,l,iaer) = 0.D0            
+
+             ELSEIF (pplev(ig,l) .le. pres_nh3_cloud ) THEN 
+	     pente_cloud=5. !!(hard-coded, correspond to scale height 0.2)
+             aerosol(ig,l,iaer) = ((pplev(ig,l)/pres_nh3_cloud)**(pente_cloud))*tau_nh3_cloud 
+
+             ENDIF
+            ENDDO
+
+          END DO
+	  
+!       3. Re-normalize to observed total column
+         tau_col(:)=0.0
+         DO l=1,nlayer
+          DO ig=1,ngrid
+               tau_col(ig) = tau_col(ig) &
+                     + aerosol(ig,l,iaer)/tau_nh3_cloud
+            ENDDO
+         ENDDO
+
+         DO ig=1,ngrid
+           DO l=1,nlayer-1
+                aerosol(ig,l,iaer)=aerosol(ig,l,iaer)/tau_col(ig)
+           ENDDO
+         ENDDO
+
+     end if ! if NH3 cloud  
+!==================================================================
+!    Jovian auroral aerosols (unknown composition) NON-GENERIC: vertical and meridional profile tuned to observations
+!    S. Guerlet (2015)
+!==================================================================
+
+
+      if (iaero_aurora .ne.0) then
+           iaer=iaero_aurora
+!       1. Initialization
+            aerosol(1:ngrid,1:nlayer,iaer)=0.D0 
+	 pm = 2000. !!case study: maxi aerosols at 20 hPa
+!       2. Opacity calculation
+          DO ig=1,ngrid
+
+	  !! Test Jupiter (based on Zhang et al 2013 observations, but a bit different), decembre 2015
+              DO l=1,nlayer
+       		aerosol(ig,l,iaer) = (pplev(ig,l)/pm)**2 * exp(-(pplev(ig,l)/pm)**2)
+              ENDDO
+          ENDDO
+	 
+ !       3. Meridional distribution, and re-normalize to observed total column
+         tau_col(:)=0.D0
+         DO ig=1,ngrid
+	  !!Jupiter
+	  !!Hem sud:
+          IF (latitude(ig)*180.D0/pi .lt. -45.D0 .and. latitude(ig)*180.D0/pi .gt. -70.) THEN
+ 	  obs_tau_col_aurora= 10.D0**(-0.06D0*latitude(ig)*180.D0/pi-3.4D0) 
+          ELSEIF (latitude(ig)*180.D0/pi .lt. -37.D0 .and. latitude(ig)*180.D0/pi .ge. -45.) THEN
+ 	  obs_tau_col_aurora= 10.D0**(-0.3D0*latitude(ig)*180.D0/pi-14.3D0) 
+           ELSEIF (latitude(ig)*180./pi .le. -70. ) THEN
+ 	  obs_tau_col_aurora= 10**(0.06*70.-3.4D0) 
+	  !!Hem Nord:  
+          ELSEIF (latitude(ig)*180.D0/pi .gt. 30.D0 .and. latitude(ig)*180.D0/pi .lt. 70.) THEN
+	  obs_tau_col_aurora= 10.D0**(0.03D0*latitude(ig)*180.D0/pi-1.17D0)  
+          ELSEIF (latitude(ig)*180.D0/pi .gt. 22.D0 .and. latitude(ig)*180.D0/pi .le. 30.) THEN
+	  obs_tau_col_aurora= 10.D0**(0.3D0*latitude(ig)*180.D0/pi-9.4D0)  
+          ELSEIF (latitude(ig)*180.D0/pi .ge. 70.) THEN
+	  obs_tau_col_aurora= 10**(0.03*70.-1.17D0)  
+          ELSEIF (latitude(ig)*180.D0/pi .ge. -37. .and. latitude(ig)*180.D0/pi .le. 22.) THEN
+	 obs_tau_col_aurora = 0.001D0    !!Jupiter: mini pas a zero
+	  ENDIF
+
+ 	  DO l=1,nlayer  
+               tau_col(ig) = tau_col(ig) + aerosol(ig,l,iaer)/obs_tau_col_aurora
+          ENDDO
+         ENDDO
+
+         DO ig=1,ngrid
+           DO l=1,nlayer-1
+                aerosol(ig,l,iaer)=aerosol(ig,l,iaer)/tau_col(ig)
+           ENDDO
+         ENDDO
+
+
+      end if ! if Auroral aerosols  
+
 
 ! --------------------------------------------------------------------------
Index: /trunk/LMDZ.GENERIC/libf/phystd/aerosol_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/aerosol_mod.F90	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/aerosol_mod.F90	(revision 1677)
@@ -16,5 +16,9 @@
 ! two-layer simple aerosol model
       integer :: iaero_back2lay = 0
-!$OMP THREADPRIVATE(iaero_co2,iaero_h2o,iaero_dust,iaero_h2so4,noaero,iaero_back2lay)
+ ! NH3 cloud
+      integer :: iaero_nh3 = 0
+ ! Auroral aerosols
+      integer :: iaero_aurora = 0
+!$OMP THREADPRIVATE(iaero_co2,iaero_h2o,iaero_dust,iaero_h2so4,noaero,iaero_back2lay,iaero_nh3,iaero_aurora)
       
 !==================================================================
Index: /trunk/LMDZ.GENERIC/libf/phystd/callcorrk.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/callcorrk.F90	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/callcorrk.F90	(revision 1677)
@@ -16,5 +16,5 @@
       use gases_h
       use radii_mod, only : su_aer_radii,co2_reffrad,h2o_reffrad,dust_reffrad,h2so4_reffrad,back2lay_reffrad
-      use aerosol_mod, only : iaero_co2,iaero_h2o,iaero_dust,iaero_h2so4, iaero_back2lay
+      use aerosol_mod, only : iaero_co2,iaero_h2o,iaero_dust,iaero_h2so4, iaero_back2lay, iaero_nh3, iaero_aurora
       USE tracer_h
       use comcstfi_mod, only: pi, mugaz, cpp
@@ -305,5 +305,11 @@
             call back2lay_reffrad(ngrid,reffrad(1,1,iaero_back2lay),nlayer,pplev)
          endif
-         
+!         if(iaer.eq.iaero_nh3)then
+!	    call nh3_reffrad(ngrid,nlayer,reffrad(1,1,iaero_nh3))
+!         endif
+!         if(iaer.eq.iaero_aurora)then
+!	    call aurora_reffrad(ngrid,nlayer,reffrad(1,1,iaero_aurora))
+!         endif
+        
      end do !iaer=1,naerkind.
 
Index: /trunk/LMDZ.GENERIC/libf/phystd/callkeys_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/callkeys_mod.F90	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/callkeys_mod.F90	(revision 1677)
@@ -42,4 +42,6 @@
       logical,save :: aeroco2,aeroh2o,aeroh2so4,aeroback2lay
 !$OMP THREADPRIVATE(aeroco2,aeroh2o,aeroh2so4,aeroback2lay)
+      logical,save :: aeronh3, aeroaurora
+!$OMP THREADPRIVATE(aeronh3,aeroaurora)
       logical,save :: aerofixco2,aerofixh2o
 !$OMP THREADPRIVATE(aerofixco2,aerofixh2o)
@@ -84,4 +86,8 @@
       real,save :: n2mixratio
 !$OMP THREADPRIVATE(size_tropo,size_strato,satval,CLFfixval,n2mixratio)
+      real,save :: size_nh3_cloud
+      real,save :: pres_nh3_cloud
+      real,save :: tau_nh3_cloud
+!$OMP THREADPRIVATE(size_nh3_cloud, pres_nh3_cloud, tau_nh3_cloud)
       real,save :: co2supsat
       real,save :: pceil
Index: /trunk/LMDZ.GENERIC/libf/phystd/iniaerosol.F
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/iniaerosol.F	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/iniaerosol.F	(revision 1677)
@@ -5,5 +5,5 @@
       use aerosol_mod
       use callkeys_mod, only: aeroco2,aeroh2o,dusttau,aeroh2so4,
-     &		aeroback2lay
+     &		aeroback2lay,aeronh3, aeroaurora
 
       IMPLICIT NONE
@@ -52,4 +52,16 @@
       write(*,*) '--- Two-layer aerosol = ', iaero_back2lay
 
+      if (aeronh3) then
+         ia=ia+1
+         iaero_nh3=ia
+      endif
+      write(*,*) '--- NH3 Cloud = ', iaero_nh3
+
+      if (aeroaurora) then
+         ia=ia+1
+         iaero_aurora=ia
+      endif
+      write(*,*) '--- Auroral aerosols = ', iaero_aurora
+
       write(*,*) '=== Number of aerosols= ', ia
       
Index: /trunk/LMDZ.GENERIC/libf/phystd/inifis_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/inifis_mod.F90	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/inifis_mod.F90	(revision 1677)
@@ -498,5 +498,5 @@
      write(*,*)" aerofixh2o = ",aerofixh2o
 
-     write(*,*)"Radiatively active sulfuric acid aersols?"
+     write(*,*)"Radiatively active sulfuric acid aerosols?"
      aeroh2so4=.false.     ! default value
      call getin_p("aeroh2so4",aeroh2so4)
@@ -505,8 +505,18 @@
 !=================================
 
-     write(*,*)"Radiatively active two-layer aersols?"
+     write(*,*)"Radiatively active two-layer aerosols?"
      aeroback2lay=.false.     ! default value
      call getin_p("aeroback2lay",aeroback2lay)
      write(*,*)" aeroback2lay = ",aeroback2lay
+
+     write(*,*)"Radiatively active ammonia cloud?"
+     aeronh3=.false.     ! default value
+     call getin_p("aeronh3",aeronh3)
+     write(*,*)" aeronh3 = ",aeronh3
+
+     write(*,*)"Radiatively active auroral aerosols?"
+     aeroaurora=.false.     ! default value
+     call getin_p("aeroaurora",aeroaurora)
+     write(*,*)" aeroaurora = ",aeroaurora
 
      write(*,*)"TWOLAY AEROSOL: total optical depth ", &
@@ -553,4 +563,19 @@
      call getin_p("size_strato",size_strato)
      write(*,*)" size_strato = ",size_strato
+
+     write(*,*)"NH3 (thin) cloud: total optical depth"
+     tau_nh3_cloud=7.D0
+     call getin_p("tau_nh3_cloud",tau_nh3_cloud)
+     write(*,*)" tau_nh3_cloud = ",tau_nh3_cloud
+
+     write(*,*)"NH3 (thin) cloud pressure level"
+     pres_nh3_cloud=7.D0
+     call getin_p("pres_nh3_cloud",pres_nh3_cloud)
+     write(*,*)" pres_nh3_cloud = ",pres_nh3_cloud
+
+     write(*,*)"NH3 (thin) cloud: particle sizes"
+     size_nh3_cloud=3.e-6
+     call getin_p("size_nh3_cloud",size_nh3_cloud)
+     write(*,*)" size_nh3_cloud = ",size_nh3_cloud
 
 !=================================
Index: /trunk/LMDZ.GENERIC/libf/phystd/radii_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/radii_mod.F90	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/radii_mod.F90	(revision 1677)
@@ -39,5 +39,5 @@
       use radinc_h, only: naerkind
       use aerosol_mod, only: iaero_back2lay, iaero_co2, iaero_dust, &
-                             iaero_h2o, iaero_h2so4
+                             iaero_h2o, iaero_h2so4,iaero_nh3,iaero_aurora
       Implicit none
 
@@ -84,4 +84,14 @@
             endif
 
+
+	    if(iaer.eq.iaero_nh3)then ! Nh3 cloud
+               reffrad(1:ngrid,1:nlayer,iaer) = 1e-6
+               nueffrad(1:ngrid,1:nlayer,iaer) = 0.1 
+            endif
+
+	    if(iaer.eq.iaero_aurora)then ! Auroral aerosols
+               reffrad(1:ngrid,1:nlayer,iaer) = 3e-7
+               nueffrad(1:ngrid,1:nlayer,iaer) = 0.1 
+            endif
 
 
@@ -363,5 +373,4 @@
 
 
-
 end module radii_mod
 !==================================================================
Index: /trunk/LMDZ.GENERIC/libf/phystd/suaer_corrk.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phystd/suaer_corrk.F90	(revision 1676)
+++ /trunk/LMDZ.GENERIC/libf/phystd/suaer_corrk.F90	(revision 1677)
@@ -180,5 +180,30 @@
 ! added by SG
        endif
-       
+      
+       if (iaer.eq.iaero_nh3) then
+         print*, 'naerkind= nh3', iaer
+
+!     visible
+         file_id(iaer,1) = 'optprop_nh3ice_vis.dat'
+         lamrefvis(iaer)=0.756E-6  ! 
+!     infrared
+         file_id(iaer,2) = 'optprop_nh3ice_ir.dat'
+         lamrefir(iaer)=6.E-6  ! 
+! added by SG
+       endif
+
+
+       if (iaer.eq.iaero_aurora) then
+         print*, 'naerkind= aurora', iaer
+
+!     visible
+         file_id(iaer,1) = 'optprop_aurora_vis.dat'
+         lamrefvis(iaer)=0.3E-6  ! 
+!     infrared
+         file_id(iaer,2) = 'optprop_aurora_ir.dat'
+         lamrefir(iaer)=6.E-6  ! 
+! added by SG
+       endif
+ 
        
       enddo
