Index: LMDZ4/trunk/libf/phy_IPCC_AR4/phyetat0.F
===================================================================
--- LMDZ4/trunk/libf/phy_IPCC_AR4/phyetat0.F	(revision 868)
+++ LMDZ4/trunk/libf/phy_IPCC_AR4/phyetat0.F	(revision 956)
@@ -7,5 +7,5 @@
      .           rlat_p, rlon_p, pctsrf_p, tsol_p,
      .           ocean_in, ok_veget_in,
-     .           albe_p, alblw_p,
+     .           alb1_p, alb2_p,
      .           rain_fall_p, snow_fall_p,solsw_p, sollw_p,
      .           radsol_p,clesphy0,
@@ -37,4 +37,6 @@
 #include "clesphys.h"
 #include "temps.h"
+#include "thermcell.h"
+#include "compbl.h"
 c======================================================================
       CHARACTER*(*) fichnom
@@ -50,8 +52,6 @@
       REAL qsol_p(klon)
       REAL snow_p(klon,nbsrf)
-      REAL albe_p(klon,nbsrf)
-cIM BEG alblw
-      REAL alblw_p(klon,nbsrf)
-cIM END alblw
+      REAL alb1_p(klon,nbsrf)   ! albedo in visible SW interval
+      REAL alb2_p(klon,nbsrf)   ! albedo in near IR interval
       REAL evap_p(klon,nbsrf)
       REAL radsol_p(klon)
@@ -89,6 +89,6 @@
       REAL qsol(klon_glo)
       REAL snow(klon_glo,nbsrf)
-      REAL albe(klon_glo,nbsrf)
-      REAL alblw(klon_glo,nbsrf)
+      REAL alb1(klon_glo,nbsrf)
+      REAL alb2(klon_glo,nbsrf)
       REAL evap(klon_glo,nbsrf)
       REAL radsol(klon_glo)
@@ -127,5 +127,5 @@
 c
       INTEGER nid, nvarid
-      INTEGER ierr, i, nsrf, isoil 
+      INTEGER ierr, i, nsrf, isoil ,k
       INTEGER length
       PARAMETER (length=100)
@@ -134,5 +134,8 @@
       CHARACTER*7 str7
       CHARACTER*2 str2
-      real iolat(jjm+1)
+
+c FH1D
+c     real iolat(jjm+1)
+      real iolat(jjm+1-1/iim)
 c
 c Ouvrir le fichier contenant l'etat initial:
@@ -181,74 +184,70 @@
        
 c
-       
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique
+! Les constantes de la physiques sont lues dans la physique seulement.
+! Les egalites du type
+!             tab_cntrl( 5 )=clesphy0(1)
+! sont remplacees par
+!             clesphy0(1)=tab_cntrl( 5 )
+! On inverse aussi la logique.
+! On remplit les tab_cntrl avec les parametres lus dans les .def
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
          DO i = 1, length
            tabcntr0( i ) = tab_cntrl( i )
          ENDDO
 c
-         cycle_diurne   = .FALSE.
-         soil_model     = .FALSE.
-         new_oliq       = .FALSE.
-         ok_orodr       = .FALSE.
-         ok_orolf       = .FALSE.
-         ok_limitvrai   = .FALSE.
-
-
-         IF( clesphy0(1).NE.tab_cntrl( 5 ) )  THEN
-             tab_cntrl( 5 ) = clesphy0(1)
-         ENDIF
-
-         IF( clesphy0(2).NE.tab_cntrl( 6 ) )  THEN
-             tab_cntrl( 6 ) = clesphy0(2)
-         ENDIF
-
-         IF( clesphy0(3).NE.tab_cntrl( 7 ) )  THEN
-             tab_cntrl( 7 ) = clesphy0(3)
-         ENDIF
-
-         IF( clesphy0(4).NE.tab_cntrl( 8 ) )  THEN
-             tab_cntrl( 8 ) = clesphy0(4)
-         ENDIF
-
-         IF( clesphy0(5).NE.tab_cntrl( 9 ) )  THEN
-             tab_cntrl( 9 ) = clesphy0( 5 )
-         ENDIF
-
-         IF( clesphy0(6).NE.tab_cntrl( 10 ) )  THEN
-             tab_cntrl( 10 ) = clesphy0( 6 )
-         ENDIF
-
-         IF( clesphy0(7).NE.tab_cntrl( 11 ) )  THEN
-             tab_cntrl( 11 ) = clesphy0( 7 )
-         ENDIF
-
-         IF( clesphy0(8).NE.tab_cntrl( 12 ) )  THEN
-             tab_cntrl( 12 ) = clesphy0( 8 )
-         ENDIF
-
-
-         dtime        = tab_cntrl(1)
-         radpas       = tab_cntrl(2)
+         tab_cntrl(1)=dtime
+         tab_cntrl(2)=radpas
          co2_ppm_etat0      = tab_cntrl(3)
          solaire_etat0      = tab_cntrl(4)
-         iflag_con    = tab_cntrl(5)
-         nbapp_rad    = tab_cntrl(6)
-
-
-         cycle_diurne    = .FALSE.
-         soil_model      = .FALSE.
-         new_oliq        = .FALSE.
-         ok_orodr        = .FALSE.
-         ok_orolf        = .FALSE.
-         ok_limitvrai    = .FALSE.
-
-         IF( tab_cntrl( 7) .EQ. 1. )    cycle_diurne  = .TRUE.
-         IF( tab_cntrl( 8) .EQ. 1. )       soil_model = .TRUE.
-         IF( tab_cntrl( 9) .EQ. 1. )         new_oliq = .TRUE.
-         IF( tab_cntrl(10) .EQ. 1. )         ok_orodr = .TRUE.
-         IF( tab_cntrl(11) .EQ. 1. )         ok_orolf = .TRUE.
-         IF( tab_cntrl(12) .EQ. 1. )     ok_limitvrai = .TRUE.
+         tab_cntrl(5)=iflag_con
+         tab_cntrl(6)=nbapp_rad
+
+         if (cycle_diurne) tab_cntrl( 7) =1.
+         if (soil_model) tab_cntrl( 8) =1.
+         if (new_oliq) tab_cntrl( 9) =1.
+         if (ok_orodr) tab_cntrl(10) =1.
+         if (ok_orolf) tab_cntrl(11) =1.
+         if (ok_limitvrai) tab_cntrl(12) =1.
 
 
       itau_phy = tab_cntrl(15)
+
+       
+
+         IF( clesphy0(1).NE.tab_cntrl( 5 ) )  THEN
+             clesphy0(1)=tab_cntrl( 5 )
+         ENDIF
+
+         IF( clesphy0(2).NE.tab_cntrl( 6 ) )  THEN
+             clesphy0(2)=tab_cntrl( 6 )
+         ENDIF
+
+         IF( clesphy0(3).NE.tab_cntrl( 7 ) )  THEN
+             clesphy0(3)=tab_cntrl( 7 )
+         ENDIF
+
+         IF( clesphy0(4).NE.tab_cntrl( 8 ) )  THEN
+             clesphy0(4)=tab_cntrl( 8 )
+         ENDIF
+
+         IF( clesphy0(5).NE.tab_cntrl( 9 ) )  THEN
+             clesphy0(5)=tab_cntrl( 9 )
+         ENDIF
+
+         IF( clesphy0(6).NE.tab_cntrl( 10 ) )  THEN
+             clesphy0(6)=tab_cntrl( 10 )
+         ENDIF
+
+         IF( clesphy0(7).NE.tab_cntrl( 11 ) )  THEN
+             clesphy0(7)=tab_cntrl( 11 )
+         ENDIF
+
+         IF( clesphy0(8).NE.tab_cntrl( 12 ) )  THEN
+             clesphy0(8)=tab_cntrl( 12 )
+         ENDIF
+
 
 c
@@ -721,5 +720,5 @@
       ENDIF
 c
-c Lecture de albedo au sol:
+c Lecture de albedo de l'interval visible au sol:
 c
       ierr = NF_INQ_VARID (nid, "ALBE", nvarid)
@@ -739,7 +738,7 @@
            ENDIF
 #ifdef NC_DOUBLE
-           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,nsrf))
-#else
-           ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,nsrf))
+           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb1(1,nsrf))
+#else
+           ierr = NF_GET_VAR_REAL(nid, nvarid, alb1(1,nsrf))
 #endif
            IF (ierr.NE.NF_NOERR) THEN
@@ -750,6 +749,6 @@
            xmax = -1.0E+20
            DO i = 1, klon_glo
-              xmin = MIN(albe(i,nsrf),xmin)
-              xmax = MAX(albe(i,nsrf),xmax)
+              xmin = MIN(alb1(i,nsrf),xmin)
+              xmax = MAX(alb1(i,nsrf),xmax)
            ENDDO
            PRINT*,'Albedo du sol ALBE**:', nsrf, xmin, xmax
@@ -759,7 +758,7 @@
          PRINT*, '          J ignore donc les autres ALBE**'
 #ifdef NC_DOUBLE
-         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,1))
-#else
-         ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,1))
+         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb1(1,1))
+#else
+         ierr = NF_GET_VAR_REAL(nid, nvarid, alb1(1,1))
 #endif
          IF (ierr.NE.NF_NOERR) THEN
@@ -770,17 +769,17 @@
          xmax = -1.0E+20
          DO i = 1, klon_glo
-            xmin = MIN(albe(i,1),xmin)
-            xmax = MAX(albe(i,1),xmax)
+            xmin = MIN(alb1(i,1),xmin)
+            xmax = MAX(alb1(i,1),xmax)
          ENDDO
          PRINT*,'Neige du sol <ALBE>', xmin, xmax
          DO nsrf = 2, nbsrf
          DO i = 1, klon_glo
-            albe(i,nsrf) = albe(i,1)
-         ENDDO
-         ENDDO
-      ENDIF
-
-c
-c Lecture de albedo au sol LW:
+            alb1(i,nsrf) = alb1(i,1)
+         ENDDO
+         ENDDO
+      ENDIF
+
+c
+c Lecture de albedo au sol dans l'interval proche infra-rouge:
 c
       ierr = NF_INQ_VARID (nid, "ALBLW", nvarid)
@@ -791,5 +790,5 @@
          DO nsrf = 1, nbsrf
            DO i = 1, klon_glo
-             alblw(i,nsrf) = albe(i,nsrf)
+             alb2(i,nsrf) = alb1(i,nsrf)
            ENDDO
          ENDDO
@@ -798,7 +797,7 @@
          PRINT*, '          J ignore donc les autres ALBLW**'
 #ifdef NC_DOUBLE
-         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alblw(1,1))
-#else
-         ierr = NF_GET_VAR_REAL(nid, nvarid, alblw(1,1))
+         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb2(1,1))
+#else
+         ierr = NF_GET_VAR_REAL(nid, nvarid, alb2(1,1))
 #endif
          IF (ierr.NE.NF_NOERR) THEN
@@ -809,11 +808,11 @@
          xmax = -1.0E+20
          DO i = 1, klon_glo
-            xmin = MIN(alblw(i,1),xmin)
-            xmax = MAX(alblw(i,1),xmax)
+            xmin = MIN(alb2(i,1),xmin)
+            xmax = MAX(alb2(i,1),xmax)
          ENDDO
          PRINT*,'Neige du sol <ALBLW>', xmin, xmax
          DO nsrf = 2, nbsrf
          DO i = 1, klon_glo
-            alblw(i,nsrf) = alblw(i,1)
+            alb2(i,nsrf) = alb2(i,1)
          ENDDO
          ENDDO
@@ -1427,21 +1426,4 @@
 
 c
-      ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
-      IF (ierr.NE.NF_NOERR) THEN
-         PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
-         PRINT*, "Depart legerement fausse. Mais je continue"
-         ancien_ok = .FALSE.
-      ELSE
-#ifdef NC_DOUBLE
-         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
-#else
-         ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
-#endif
-         IF (ierr.NE.NF_NOERR) THEN
-            PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
-            CALL abort
-         ENDIF
-      ENDIF
-c
 c Lecture ratqs
 c
@@ -1492,5 +1474,6 @@
       xmax = MAXval(run_off_lic_0)
       PRINT*,'(ecart-type) run_off_lic_0:', xmin, xmax
-c
+
+
 c Fermer le fichier:
 c
@@ -1503,11 +1486,20 @@
 cym  en attendant mieux
         iolat(1)=rlat(1)
-	iolat(jjm+1)=rlat(klon_glo)
+
+!FH1D   
+!iolat(jjm+1)=rlat(klon_glo)
+	iolat(jjm+1-1/iim)=rlat(klon_glo)
+        if (iim.gt.1) then
 	do i=2,jjm
 	  iolat(i)=rlat(2+(i-2)*iim)
 	enddo
+        endif
+
 	CALL bcast_mpi(iolat)
 	CALL bcast_mpi(rlon)
-        call init_iophy(iolat,rlon(2:iim+1))
+
+!FH1D
+!       call init_iophy(iolat,rlon(2:iim+1))
+        call init_iophy(iolat,rlon(2-1/iim:iim+1-1/iim))
        
 c$OMP END MASTER
@@ -1522,6 +1514,6 @@
       call Scatter( qsol,qsol_p)
       call Scatter( snow,snow_p)
-      call Scatter( albe,albe_p)
-      call Scatter( alblw,alblw_p)
+      call Scatter( alb1,alb1_p)
+      call Scatter( alb2,alb2_p)
       call Scatter( evap,evap_p)
       call Scatter( radsol,radsol_p)
