*=*=*=*= newgridmars1.html =*=*=*=*
PROGRAM newgridmars1

PROGRAM newgridmars1


      PROGRAM newgridmars1
      IMPLICIT NONE

c=======================================================================
c
c   Auteur:  F.Forget
c   -------
c
c   Objet:
c   ------
c Premiere etape pour la preparation d'un nouvel etat martien
c dans une nouvelle grille.
c Lecture des anciennes donnees et ecriture des variables naturelle
c dans une grille iimp1*jjmp1  (Y compris les vents et les variables
c de la physique)
c
c (ce programme est a compiler dans l' ANCIENNE grille)
c  AVEC L'ANCIEN SIGMA.DEF !!!!!!!!!!!!!!!!!!!!!!!!!
c
c Il faut lancer  newgridmars2 ensuite

c=======================================================================
c   Declarations:
c   -------------
#include "dimensions.h"
#include "paramet.h"
#include "comconst.h"
#include "comdissip.h"
#include "comvert.h"
#include "comgeom.h"
#include "logic.h"
#include "temps.h"
#include "control.h"
#include "ener.h"
#include "drsdef.h"
#include "description.h"

c ----------------------
#include "../phymars/dimphys.h"


      REAL       timedyn, timefi !fraction du jour dans start,startfi
      INTEGER ij, l,i,j

      INTEGER setname, cluvdb, getdat,aslun,ierr ! DRS

c   variables dynamiques du GCM
      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
      REAL h(ip1jmp1,llm)                    ! temperature potentielle
      REAL q(ip1jmp1,llm,nqmx)               ! champs advectes
      REAL pext(ip1jmp1)                     ! pression extensive
      REAL pks(ip1jmp1),pksf(ip1jmp1)        ! exner (f pour filtre)
      REAL phis(ip1jmp1)                     ! geopotentiel au sol


c Variable Physiques (grille physique)
c ------------------------------------
      REAL tsurf(ngridmx),tsoil(ngridmx,nsoilmx),co2ice(ngridmx)
      INTEGER ngrid, start,length
      parameter (length = 100)
      REAL tab_cntrl_fi(length) ! tableau des parametres de startfi
      INTEGER*4 day_ini_fi

c Variable naturelle / grille scalaire
c ------------------------------------
      REAL ps(ip1jmp1),T(ip1jmp1,llm),us(ip1jmp1,llm),vs(ip1jmp1,llm)
      REAL tsurfS(ip1jmp1),tsoilS(ip1jmp1,nsoilmx),co2iceS(ip1jmp1)

c     Var intermediaires : vent naturel, mais pas coord scalaire
      REAL vn(ip1jm,llm),un(ip1jmp1,llm)

c Autre  variable
c ----------------
      LOGICAL startdrs,ldrs
      REAL ptotal, co2icetotal


c-----------------------------------------------------------------------
c   Initialisations:
c   ----------------

      grireg   = .TRUE.
      startdrs = .TRUE.
      ldrs = .TRUE.

c-----------------------------------------------------------------------

c LECTURE DES DONNEES
c -------------------
      CALL lectba(startdrs,nqmx,vcov,ucov,h,q,pext,phis,timedyn)
      CALL readfi(ngrid,nsoilmx,ldrs,
     .      day_ini_fi,timefi,co2ice,tsurf,tsoil)

c Controle de la synchro
      if ((day_ini_fi.ne.day_ini).or.(abs(timefi-timedyn).gt.1.e-10))
     &  stop ' Probleme de Synchro entre start et startfi !!!'

c On relit specialement le tableau des parametres de startfi
      start = 94 ! On doit reouvrir startfi
      ierr = aslun(start,'startfi.dic',
     .             start+1,'startfi.dat',IDRS_READ)
      ierr = CLUVDB()
      ierr = SETNAME(' ','controle',' ',' ',' ')
      ierr = GETDAT(start, tab_cntrl_fi, IDRS_BYTES_PER_WORD*length)


c    initialisation
c    --------------
      CALL iniconst
      CALL inigeom
      CALL inifilr
      CALL exner(ip1jmp1,pext,aire,pks,pksf)


c Transformation EN VARIABLE NATURELLE / GRILLE SCALAIRE si ncessaire
c -------------------------------------------------------------------


c    Vent
      CALL covnat(llm,ucov, vcov, un, vn)
      call wind_scal(un,vn,us,vs)

c    Pression
      call multipl(ip1jmp1,pext,unsaire,ps)
c    Temperature
      DO l=1,llm
         DO ij=1,ip1jmp1
               T(ij,l) = h(ij,l)*pks(ij)*s(l) / cpp
         ENDDO
      ENDDO

c   Variable physique :
      call gr_fi_dyn(1,ngridmx,iip1,jjp1,tsurf,tsurfS)
      call gr_fi_dyn(1,ngridmx,iip1,jjp1,co2ice,co2iceS)
      call gr_fi_dyn(nsoilmx,ngridmx,iip1,jjp1,tsoil,tsoilS)


c Info pour controler
c -------------------
      ptotal =  0.
      co2icetotal = 0.
      DO j=1,jjp1
         DO i=1,iim
            ptotal=ptotal+pext(i+(iim+1)*(j-1))/g
            co2icetotal = co2icetotal +
     &            co2iceS(i+(iim+1)*(j-1))*aire(i+(iim+1)*(j-1))

         ENDDO
      ENDDO
      write(*,*)'Ancienne grille : masse de l''atm :',ptotal
      write(*,*)'Ancienne grille : masse de la glace CO2 :',co2icetotal

c Ecriture dans le fichier grid2newgrid.data
c ------------------------------------------
      open (23,file = 'newgridmars.data',
     &                form='unformatted')

c  Variable de start
c (les info du "controle" sont ds le controle de startfi, sauf kappa
c et les variables de controles

      write (23)rlonu,rlatv,sig,s,sig_s,timedyn,us,vs,t,ps,phis,kappa
     &   ,ang0,etot0,ptot0,ztot0,stot0

c variable de startfi
      write (23) tab_cntrl_fi,co2ices,tsurfs,tsoils

c Variable de controle
      write(23)  ptotal, co2icetotal

      close (23)

      END