Index: trunk/SOURCES/3D-physique-gen_mod.f90
===================================================================
--- trunk/SOURCES/3D-physique-gen_mod.f90	(revision 121)
+++ trunk/SOURCES/3D-physique-gen_mod.f90	(revision 124)
@@ -36,4 +36,5 @@
   integer ::  err                       !< pour l'allocation des tableaux
   integer ::  igrdline                  !< si 1 fixe la position en jouant sur la fusion shelf
+  integer ::  ibmelt_inv                !< si 1 inversion du bmelt (avec igrdline=1)
   integer ::  i_resolmeca               !< defini le type d'association SIA-L1
   integer ::  iter_beta                 !< pour la determination du frottement
Index: trunk/SOURCES/Ant40_files/lect-anteis_mod.f90
===================================================================
--- trunk/SOURCES/Ant40_files/lect-anteis_mod.f90	(revision 121)
+++ trunk/SOURCES/Ant40_files/lect-anteis_mod.f90	(revision 124)
@@ -228,5 +228,5 @@
     do J=1,NY
        do I=1,NX
-          if (((BSOC(I,J)+H(I,J)*RO/ROW -SEALEVEL).LT.0.).and.(H(I,J).gt.1.E-3)) then
+          if ((BSOC(I,J)+H(I,J)*RO/ROW -SEALEVEL).LT.0.) then
              FLOT(I,J)=.TRUE.
           else
Index: trunk/SOURCES/bmelt-seuil-profondeur_mod.f90
===================================================================
--- trunk/SOURCES/bmelt-seuil-profondeur_mod.f90	(revision 121)
+++ trunk/SOURCES/bmelt-seuil-profondeur_mod.f90	(revision 124)
@@ -16,160 +16,164 @@
 module  bmelt_seuil_prof         
 
-! prametrise la fusion basale (ice shelves)
-! Pour l'actuel : 2 valeurs  pour 2 domaines de profondeur
-! + une valeur pour bmgrz
-! A choisir dans le module_choix
+  ! prametrise la fusion basale (ice shelves)
+  ! Pour l'actuel : 2 valeurs  pour 2 domaines de profondeur
+  ! + une valeur pour bmgrz
+  ! A choisir dans le module_choix
 
-use module3d_phy
+  use module3d_phy
 
 
-implicit none
+  implicit none
 
-real :: bm_grz                        !< valeur prescrite a la grounding zone
-real,dimension(nx,ny) ::  bmgrz       !< tabelau fusion basale a la grounding zone
+  real :: bm_grz                        !< valeur prescrite a la grounding zone
+  real,dimension(nx,ny) ::  bmgrz       !< tabelau fusion basale a la grounding zone
 
-real :: bmshelf_plateau               !< valeur prescrite sur le plateau cont.
-real :: bmshelf_abysses               !< valeur prescrite au dessus de l'ocean profond
-real :: depth_talus                   !< profondeur de transition 
-real,dimension(nx,ny) ::  bmshelf     !< tableau fusion basale sous shelf
+  real :: bmshelf_plateau               !< valeur prescrite sur le plateau cont.
+  real :: bmshelf_abysses               !< valeur prescrite au dessus de l'ocean profond
+  real :: depth_talus                   !< profondeur de transition 
+  real,dimension(nx,ny) ::  bmshelf     !< tableau fusion basale sous shelf
 
 
 contains
-!-------------------------------------------------------------------------------
-!> SUBROUTINE: init_bmelt
-!! Cette routine fait l'initialisation pour la fusion basale.
-!! @note Elle est appelée par inputfile-vec-0.5.f90
-!!
-!>
-subroutine init_bmelt
+  !-------------------------------------------------------------------------------
+  !> SUBROUTINE: init_bmelt
+  !! Cette routine fait l'initialisation pour la fusion basale.
+  !! @note Elle est appelée par inputfile-vec-0.5.f90
+  !!
+  !>
+  subroutine init_bmelt
 
 
 
-! Cette routine fait l'initialisation pour la fusion basale.
-! Elle est appelée par inputfile-vec-0.5.f90
+    ! Cette routine fait l'initialisation pour la fusion basale.
+    ! Elle est appelée par inputfile-vec-0.5.f90
 
 
-namelist/bmelt_seuil/bm_grz,bmshelf_plateau,bmshelf_abysses,depth_talus
+    namelist/bmelt_seuil/bm_grz,bmshelf_plateau,bmshelf_abysses,depth_talus
 
-if (itracebug.eq.1)  call tracebug('entree dans init_bmelt de bmelt_seuil_prof')
+    if (itracebug.eq.1)  call tracebug('entree dans init_bmelt de bmelt_seuil_prof')
 
-rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
-read(num_param,bmelt_seuil)
-write(num_rep_42,bmelt_seuil)
+    rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
+    read(num_param,bmelt_seuil)
+    write(num_rep_42,bmelt_seuil)
 
-!    ecriture dans le fichier parametres
+    !    ecriture dans le fichier parametres
 
 428 format(A)
 
-write(num_rep_42,428)'!___________________________________________________________' 
-write(num_rep_42,428) '&bmelt_seuil                     ! module  bmelt_seuil_prof'
-write(num_rep_42,*)   'bm_grz           =',bm_grz
-write(num_rep_42,*)   'bmshelf_plateau  =',bmshelf_plateau
-write(num_rep_42,*)   'bmshelf_abysses  =',bmshelf_abysses
-write(num_rep_42,*)   'depth_talus      =',depth_talus
-write(num_rep_42,*)'/'                      
-write(num_rep_42,428) '! Pour l actuel : bm_grz a la grounding line'
-write(num_rep_42,428) '!                 bmshelf_plateau sur le plateau continental'
-write(num_rep_42,428) '!                 bmshelf_abysses pour les grandes profondeurs'
-write(num_rep_42,428) '!       depth_talus, negative, separation entre les 2 domaines'
-write(num_rep_42,*)
-write(num_rep_42,428)'!___________________________________________________________' 
+    write(num_rep_42,428)'!___________________________________________________________' 
+    write(num_rep_42,428) '&bmelt_seuil                     ! module  bmelt_seuil_prof'
+    write(num_rep_42,*)   'bm_grz           =',bm_grz
+    write(num_rep_42,*)   'bmshelf_plateau  =',bmshelf_plateau
+    write(num_rep_42,*)   'bmshelf_abysses  =',bmshelf_abysses
+    write(num_rep_42,*)   'depth_talus      =',depth_talus
+    write(num_rep_42,*)'/'                      
+    write(num_rep_42,428) '! Pour l actuel : bm_grz a la grounding line'
+    write(num_rep_42,428) '!                 bmshelf_plateau sur le plateau continental'
+    write(num_rep_42,428) '!                 bmshelf_abysses pour les grandes profondeurs'
+    write(num_rep_42,428) '!       depth_talus, negative, separation entre les 2 domaines'
+    write(num_rep_42,*)
+    write(num_rep_42,428)'!___________________________________________________________' 
 
 
 
-bmgrz(:,:) = bm_grz
+    bmgrz(:,:) = bm_grz
 
-where (Bsoc0(:,:).lt.depth_talus)
-   bmshelf(:,:)=bmshelf_abysses
-elsewhere
-   bmshelf(:,:)=bmshelf_plateau
-end where
+    where (Bsoc0(:,:).lt.depth_talus)
+        bmshelf(:,:)=bmshelf_abysses
+    elsewhere
+        bmshelf(:,:)=bmshelf_plateau
+    end where
 
-debug_3D(:,:,34)=bmshelf(:,:)
-return
-end subroutine init_bmelt
+    debug_3D(:,:,34)=bmshelf(:,:)
+    return
+  end subroutine init_bmelt
 
-!________________________________________________________________________________
+  !________________________________________________________________________________
 
-!> SUBROUTINE: bmeltshelf
-!! Cette routine calcule la fusion basale proprement dite pour les points flottants
-!! @note coefbmshelf a ete calcule par forclim et permet de faire varier en fonction du climat
-!>
+  !> SUBROUTINE: bmeltshelf
+  !! Cette routine calcule la fusion basale proprement dite pour les points flottants
+  !! @note coefbmshelf a ete calcule par forclim et permet de faire varier en fonction du climat
+  !>
 
-subroutine bmeltshelf
+  subroutine bmeltshelf
 
 
-! cette routine calcule la fusion basale proprement dite pour les points flottants
-! coefbmshelf a ete calcule par forclim et permet de faire varier en fonction du climat
+    ! cette routine calcule la fusion basale proprement dite pour les points flottants
+    ! coefbmshelf a ete calcule par forclim et permet de faire varier en fonction du climat
 
-integer :: ngr           ! nombre de voisins flottants
-real    :: coef_talus    ! pour ne pas changer la fusion au dessus de l'ocean profond
+    integer :: ngr           ! nombre de voisins flottants
+    real    :: coef_talus    ! pour ne pas changer la fusion au dessus de l'ocean profond
 
-if (itracebug.eq.1)  call tracebug('entree dans bmeltshelf de bmelt_seuil_prof')
+    if (itracebug.eq.1)  call tracebug('entree dans bmeltshelf de bmelt_seuil_prof')
 
-where (Bsoc0(:,:).lt.depth_talus)
-   bmshelf(:,:)=bmshelf_abysses
-elsewhere
-   bmshelf(:,:)=bmshelf_plateau
-end where
+    where (Bsoc0(:,:).lt.depth_talus)
+        bmshelf(:,:)=bmshelf_abysses
+    elsewhere
+        bmshelf(:,:)=bmshelf_plateau
+    end where
 
-do j=1,ny
-   do i=1,nx
+    do j=1,ny
+      do i=1,nx
 
-talus_nochange : if (Bsoc0(i,j).lt.depth_talus) then 
-           coef_talus = 1         ! pas de changement au dessus de l'ocecan profond
+        talus_nochange: if (Bsoc0(i,j).lt.depth_talus) then 
+            coef_talus = 1         ! pas de changement au dessus de l'ocecan profond
         else
-           coef_talus = coefbmshelf
+            coef_talus = coefbmshelf
         endif talus_nochange
 
 
-shelf:    if (flot(i,j)) then    ! partie flottante
+        shelf: if (flot(i,j)) then    ! partie flottante
 
             bmelt(i,j)=coef_talus*bmshelf(i,j)
 
-! fbm est vrai si le point est flottant mais un des voisins est pose
-! calcule dans flottab
+            ! fbm est vrai si le point est flottant mais un des voisins est pose
+            ! calcule dans flottab
 
             if (fbm(i,j)) then 
-               bmelt(i,j)=coef_talus*bmgrz(i,j)
-            endif   
+                bmelt(i,j)=coef_talus*bmgrz(i,j)
+            endif
 
 
 
-! ATTENTION le bloc suivant sert a determiner la fusion basale d'equilibre
-! pour les shelves stationnaires
+            ! ATTENTION le bloc suivant sert a determiner la fusion basale d'equilibre
+            ! pour les shelves stationnaires
 
-  if (igrdline.eq.1) then
-     corrbmelt(i,j)=hdot(i,j)+bmelt(i,j)   ! le bmelt d'equilibre
-     debug_3D(i,j,28)=corrbmelt(i,j)
-  endif
+            if ((igrdline.eq.1).and.(ibmelt_inv.eq.1)) then
+                !     corrbmelt(i,j)=hdot(i,j)+bmelt(i,j)   ! le bmelt d'equilibre
+                !     bmelt(i,j)=corrbmelt(i,j)
+                corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j)*0.85
+                bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j)     
+            endif
 
 
         else                   ! point posé, on compte le nombre de voisins flottants
-           ngr=0
-           if ((i.ne.1).and.(i.ne.nx).and.(j.ne.1).and.(j.ne.ny)) then 
-              if (flot(i+1,j)) ngr=ngr+1
-              if (flot(i-1,j)) ngr=ngr+1
-              if (flot(i,j+1)) ngr=ngr+1
-              if (flot(i,j-1)) ngr=ngr+1
-           end if
-              
+            ngr=0
+            if ((i.ne.1).and.(i.ne.nx).and.(j.ne.1).and.(j.ne.ny)) then 
+                if (flot(i+1,j)) ngr=ngr+1
+                if (flot(i-1,j)) ngr=ngr+1
+                if (flot(i,j+1)) ngr=ngr+1
+                if (flot(i,j-1)) ngr=ngr+1
+            end if
 
-!   la fusion des points limites est une combinaison entre valeur posée et valeur flottante
-!   en fonction du nombre de points flottants
 
-           bmelt(i,j)= ngr/4.*bmgrz(i,j)*coef_talus+(1.-ngr/4.)*bmelt(i,j)
-         
+            !   la fusion des points limites est une combinaison entre valeur posée et valeur flottante
+            !   en fonction du nombre de points flottants
 
+            bmelt(i,j)= ngr/4.*bmgrz(i,j)*coef_talus+(1.-ngr/4.)*bmelt(i,j)
+
+            if ((igrdline.eq.1).and.(ibmelt_inv.eq.1)) then
+                corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j)  !*0.85
+                bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j)
+            endif
         endif shelf
-
-      end do 
+      end do
     end do
 
-
-if (igrdline.eq.1) then
-    bmelt(:,:)=0.      ! hdot donne alors le -bmelt
+if ((igrdline.eq.1).and.(ibmelt_inv.eq.0)) then
+    where (i_Hp(:,:).eq.1)
+        bmelt(:,:)=0.    ! hdot donne alors le -bmelt
+    endwhere
 endif
-
 
 return
Index: trunk/SOURCES/conserv-mass-adv-diff_sept2009_mod.f90
===================================================================
--- trunk/SOURCES/conserv-mass-adv-diff_sept2009_mod.f90	(revision 121)
+++ trunk/SOURCES/conserv-mass-adv-diff_sept2009_mod.f90	(revision 124)
@@ -416,5 +416,12 @@
 
 !    if ((time.lt.time_gl(1)).or.(nt.lt.2)) then      ATTENTION test seulement si version prescribe-H_mod.f90
-       call prescribe_present_H_gl       ! prescribe present thickness at the grounding line
+   if (ibmelt_inv.eq.0) then
+      call prescribe_present_H_gl       ! prescribe present thickness at the grounding line
+   else if (ibmelt_inv.eq.1) then ! inversion bmelt
+      call prescribe_present_H_gl_bmelt ! prescribe only grounding line points
+   else
+      print*,'ibmelt_inv value must be 0 or 1 !!!'
+      stop
+   endif
 !    else
 !       call prescribe_retreat
@@ -550,40 +557,17 @@
 H(:,:)=max(H(:,:),0.)       ! pas d'epaisseur negative
 
-!~ ! calcul du masque "ice"
-!~ where (flot(:,:))        ! points flottants, sera éventuellement réévalué dans flottab
-!~    where(H(:,:).gt.max(Hmin,Hmin+BM(:,:)-Bmelt(:,:)))
-!~       ice(:,:)=1
-!~    elsewhere
-!~       ice(:,:)=0
-!~       H(:,:)=max(1.,min(0.,(sealevel - Bsoc(:,:))*row/ro-0.01))
-!~    endwhere
-!~ !   H(:,:)=max(H(:,:),1.) ! dans la partie marine l'épaisseur mini est 1 m
-!~ !   H(:,:)=max(1.,min(0.,(sealevel - Bsoc(:,:))*row/ro-0.01))
-!~ elsewhere                ! points posés
-!~    where(H(:,:).gt.0.)
-!~       ice(:,:)=1
-!~    elsewhere
-!~       ice(:,:)=0
-!~    endwhere
-!~ endwhere
-
 ! eventuellement retirer apres spinup ou avoir un cas serac
 Hdot(:,:)=(H(:,:)-vieuxH(:,:))/dt
 !$OMP END WORKSHARE
 
-!~ if (igrdline.ne.3) then
-!~    !$OMP WORKSHARE
-!~    Hdot(:,:)=min(Hdot(:,:),10.)
-!~    Hdot(:,:)=max(Hdot(:,:),-10.)
-!~    !$OMP END WORKSHARE
-!~ endif
+if (ibmelt_inv.eq.1) then ! inversion du bmelt avec igrdline=1
+   !$OMP WORKSHARE
+   where (i_Hp(:,:).eq.1)
+      H(:,:)=Hp(:,:)
+   endwhere
+   !$OMP END WORKSHARE
+endif
 
 !$OMP WORKSHARE
-where (i_hp(:,:).ne.1)
-   H(:,:)=vieuxH(:,:)+Hdot(:,:)*dt
-end where
-
-
-
 ! si mk0=-1, on garde l'epaisseur precedente
 ! en attendant un masque plus propre
Index: trunk/SOURCES/initial-phy-2.f90
===================================================================
--- trunk/SOURCES/initial-phy-2.f90	(revision 121)
+++ trunk/SOURCES/initial-phy-2.f90	(revision 124)
@@ -27,5 +27,5 @@
 
   namelist/runpar/runname,icompteur,iout,reprcptr,itracebug,num_tracebug,comment_run
-  namelist/grdline/igrdline,Schoof
+  namelist/grdline/igrdline,Schoof,ibmelt_inv
   namelist/timesteps/dtmin,dtmax,dtt,testdiag,tbegin,tend
 
@@ -123,7 +123,9 @@
   write(num_rep_42,*) 'igrdline     = ',igrdline
   write(num_rep_42,*) 'Schoof       = ',Schoof
+  write(num_rep_42,*) 'ibmelt_inv   = ',ibmelt_inv
   write(num_rep_42,*)'/'                           
-  write(num_rep_42,428)'! igrdline :  1 ligne d echouage fixée, sinon 0'
-  write(num_rep_42,428)'! Schoof   :  0 pas de Schoof, 1 flux de Schoof'
+  write(num_rep_42,428)'! igrdline   : 1 ligne d echouage fixée, sinon 0'
+  write(num_rep_42,428)'! Schoof     : 0 pas de Schoof, 1 flux de Schoof'
+  write(num_rep_42,428)'! ibmelt_inv : 0 cas std, 1 inversion du bmelt (avec igrdline=1)'
   write(num_rep_42,*)
 
Index: trunk/SOURCES/prescribe-H-i2s_mod.f90
===================================================================
--- trunk/SOURCES/prescribe-H-i2s_mod.f90	(revision 121)
+++ trunk/SOURCES/prescribe-H-i2s_mod.f90	(revision 124)
@@ -127,8 +127,30 @@
        hp(:,:)   = Hp0(:,:)
     end where
-if (itracebug.eq.1)  call tracebug(' fin prescribe_present_H_gl ')
+if (itracebug.eq.1)  call tracebug(' fin prescribe_present_H_gl')
 
 
   end subroutine prescribe_present_H_gl
+  
+   !______________________________________________________________________________________
+  !>  function prescribe_present_H_gl_bmelt
+  !! calculate the initial grounding line position
+  !! only grounding line points are prescribed to present value
+  !! @return i_hp(:,:) and hp(:,:)
+
+  subroutine prescribe_present_H_gl_bmelt
+
+    implicit none
+
+    if (itracebug.eq.1)  call tracebug(' Entree dans routine  prescribe_present_H_gl_bmelt')
+
+!    where (MK_gl0(:,:) .eq. 1) ! grounding line only !cdc pour calcule fonte basale
+!       i_hp(:,:) = 1                                 ! thickness prescribed to present value
+!       hp(:,:)   = Hp0(:,:)
+!    end where
+    i_hp(:,:) = 0
+if (itracebug.eq.1)  call tracebug(' fin prescribe_present_H_gl_bmelt')
+
+
+  end subroutine prescribe_present_H_gl_bmelt
 
   !______________________________________________________________________________________
Index: trunk/SOURCES/resol_adv_diff_2D-sept2009.f90
===================================================================
--- trunk/SOURCES/resol_adv_diff_2D-sept2009.f90	(revision 121)
+++ trunk/SOURCES/resol_adv_diff_2D-sept2009.f90	(revision 124)
@@ -278,80 +278,48 @@
 
 relax_loop: do while(.not.stopp)
-ntour=ntour+1
-!$OMP PARALLEL
-!$OMP DO PRIVATE(reste)
-do j=2,ny-1
-   do i=2,nx-1
-
-      reste = (((arelax(i,j)*newH(i-1,j) +drelax(i,j)*newH(i,j-1)) &
-           + (brelax(i,j)*newH(i+1,j) + erelax(i,j)*newH(i,j+1))) &
-           + crelax(i,j)*newH(i,j))- frelax(i,j)
-
-!if (ntour.eq.1)  debug_3D(i,j,49)=(((arelax(i,j)*newH(i-1,j) +drelax(i,j)*newH(i,j-1)) &
-!           + (brelax(i,j)*newH(i+1,j) + erelax(i,j)*newH(i,j+1))) &
-!           + crelax(i,j)*newH(i,j))
-
-
-      deltaH(i,j) = reste/crelax(i,j)
-
+   ntour=ntour+1
+   !$OMP PARALLEL
+   !$OMP DO PRIVATE(reste)
+   do j=2,ny-1
+      do i=2,nx-1
+         reste = (((arelax(i,j)*newH(i-1,j) +drelax(i,j)*newH(i,j-1)) &
+               + (brelax(i,j)*newH(i+1,j) + erelax(i,j)*newH(i,j+1))) &
+               + crelax(i,j)*newH(i,j))- frelax(i,j)
+
+         deltaH(i,j) = reste/crelax(i,j)
+      end do
    end do
-end do
-!$OMP END DO
-
-!debug_3D(:,:,50)=arelax(:,:)
-!debug_3D(:,:,51)=brelax(:,:)
-!debug_3D(:,:,52)=crelax(:,:)
-!debug_3D(:,:,53)=drelax(:,:)
-!debug_3D(:,:,54)=erelax(:,:)
-!debug_3D(:,:,55)=frelax(:,:)
-
-
-!$OMP WORKSHARE
-newH(:,:)=newH(:,:)-deltaH(:,:)
-!$OMP END WORKSHARE
-!$OMP END PARALLEL
+   !$OMP END DO
+
+   !$OMP WORKSHARE
+   newH(:,:)=newH(:,:)-deltaH(:,:)
+   !$OMP END WORKSHARE
+   !$OMP END PARALLEL
 
 
 ! critere d'arret:
 ! ----------------         
-
-delh=0
-
-!$OMP PARALLEL
-!$OMP DO REDUCTION(+:delh)
-do j=2,ny-1
-   do i=2,nx-1
-      delh=delh+deltaH(i,j)**2
+   delh=0
+
+   !$OMP PARALLEL
+   !$OMP DO REDUCTION(+:delh)
+   do j=2,ny-1
+      do i=2,nx-1
+         delh=delh+deltaH(i,j)**2
+      end do
    end do
-end do
-!$OMP END DO
-!$OMP END PARALLEL
-
-if (delh.gt.0.) then
-   testh=sqrt(delh)/((nx-2)*(ny-2))
-else
-   testh=0.
-endif
-stopp = (testh.lt.1.e-4).or.(ntour.gt.100)
-
-
+   !$OMP END DO
+   !$OMP END PARALLEL
+
+   if (delh.gt.0.) then
+      testh=sqrt(delh)/((nx-2)*(ny-2))
+   else
+      testh=0.
+   endif
+   stopp = (testh.lt.1.e-4).or.(ntour.gt.100)
 
 end do relax_loop
 
-
-! thickness at the upwind node
-!do j = 1, ny
-!   do i = 2, nx
-!      debug_3D(i,j,92) = c_west(i,j) * newH(i-1,j) + c_east(i,j) * newH(i,j)
-!   end do
-!end do
-!do j = 2, ny
-!   do i = 1, nx
-!      debug_3D(i,j,93) = c_south(i,j) * newH(i,j-1) + c_north(i,j) * newH(i,j)
-!   end do
-!end do
-
 if (itracebug.eq.1)  call tracebug(' fin routine resolution_diffusion')
-
  
 return
Index: trunk/SOURCES/spinup_mod.f90
===================================================================
--- trunk/SOURCES/spinup_mod.f90	(revision 121)
+++ trunk/SOURCES/spinup_mod.f90	(revision 124)
@@ -102,4 +102,5 @@
 case default
   print*,'type_vitbil valeur invalide dans spinup_vitbil'
+  stop
 end select
 
