/[lmdze]/trunk/dyn3d/gcm.f
ViewVC logotype

Diff of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/dyn3d/gcm.f revision 109 by guez, Wed Sep 17 10:08:00 2014 UTC trunk/Sources/dyn3d/gcm.f revision 224 by guez, Fri Apr 28 13:40:59 2017 UTC
# Line 3  PROGRAM gcm Line 3  PROGRAM gcm
3    ! Authors: P. Le Van, L. Fairhead, F. Hourdin    ! Authors: P. Le Van, L. Fairhead, F. Hourdin
4    ! From "gcm.F", version 1.4, 2006/04/04 15:05:16    ! From "gcm.F", version 1.4, 2006/04/04 15:05:16
5    
6    ! General circulation model of LMD. Avec coordonnée verticale    ! General circulation model of LMD. Avec coordonn\'ee verticale
7    ! hybride, avec nouveaux opérateurs de dissipation "*" ("gradiv2",    ! hybride, avec nouveaux op\'erateurs de dissipation "*" ("gradiv2",
8    ! "divgrad2", "nxgraro2"). Possibilité de choisir le schéma pour    ! "divgrad2", "nxgraro2"). Possibilit\'e de choisir le sch\'ema pour
9    ! l'advection de "q", en modifiant "iadv" dans "traceur.def".    ! l'advection de "q", en modifiant "iadv" dans "traceur.def".
10    
11    use comconst, only: daysec, dtvr, iniconst    use comconst, only: daysec, dtvr, iniconst
12    use comgeom, only: rlatu, aire_2d, cu_2d, cv_2d, rlonv, inigeom    use comdissnew, only: read_comdissnew
13    use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond    use comgeom, only:  aire_2d, inigeom
14    use conf_gcm_m, only: day_step, iperiod, anneeref, dayref, iecri, iphysiq, &    use comgeomphy, only: airephy
15         nday, raz_date, periodav, conf_gcm, iflag_phys    use conf_gcm_m, only: day_step, iperiod, iecri, iphysiq, nday, periodav, &
16           conf_gcm, iflag_phys
17      use conf_guide_m, only: conf_guide
18    use dimens_m, only: iim, jjm, llm, nqmx    use dimens_m, only: iim, jjm, llm, nqmx
   use dimphy, only: klon  
19    USE disvert_m, ONLY : disvert    USE disvert_m, ONLY : disvert
20    use dynetat0_m, only: dynetat0, day_ini    use dynetat0_m, only: dynetat0, day_ini
21    use dynredem0_m, only: dynredem0    use dynredem0_m, only: dynredem0
# Line 31  PROGRAM gcm Line 32  PROGRAM gcm
32    use leapfrog_m, only: leapfrog    use leapfrog_m, only: leapfrog
33    use netcdf95, only: nf95_close    use netcdf95, only: nf95_close
34    use suphec_m, only: suphec    use suphec_m, only: suphec
   use temps, only: day_ref, annee_ref, day_end, itau_dyn  
   use tracstoke, only: istdyn, istphy  
35    use unit_nml_m, only: unit_nml    use unit_nml_m, only: unit_nml
36    use yoethf_m, only: yoethf    use yoethf_m, only: yoethf
37    use write_field, only: NbField, Ncid    use createnewfield_m, only: NbField, Ncid
38    
39    IMPLICIT NONE    IMPLICIT NONE
40    
41    ! Variables dynamiques :    ! Variables dynamiques :
42    REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm)  ! vent covariant    REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm)  ! vent covariant
43    REAL teta(iim + 1, jjm + 1, llm) ! température potentielle    REAL teta(iim + 1, jjm + 1, llm) ! temp\'erature potentielle
44    REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés    REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advect\'es
45    REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)    REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
46    REAL masse(iim + 1, jjm + 1, llm) ! masse d'air    REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
47    REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol    REAL phis(iim + 1, jjm + 1) ! g\'eopotentiel au sol
48    
   ! Variables pour le fichier histoire :  
   REAL time_0 ! time in day, as a fraction of day, in [0, 1[  
   
   ! Calendrier :  
49    LOGICAL:: true_calendar = .false. ! default value    LOGICAL:: true_calendar = .false. ! default value
   
   logical mask_v(iim + 1, jjm)  
   ! (mask for points in the "v" grid, first index is for longitude,  
   ! second index is for latitude)  
   
50    integer i    integer i
51    
52    namelist /main_nml/true_calendar    namelist /main_nml/true_calendar
# Line 67  PROGRAM gcm Line 57  PROGRAM gcm
57    open(unit_nml, file="used_namelists.txt", status="replace", action="write")    open(unit_nml, file="used_namelists.txt", status="replace", action="write")
58    
59    CALL conf_gcm    CALL conf_gcm
60      call read_comdissnew
61    
62    print *, "Enter namelist 'main_nml'."    print *, "Enter namelist 'main_nml'."
63    read (unit=*, nml=main_nml)    read (unit=*, nml=main_nml)
# Line 79  PROGRAM gcm Line 70  PROGRAM gcm
70       call ioconf_calendar('360d')       call ioconf_calendar('360d')
71    endif    endif
72    
   ! Initialisation des traceurs  
   ! Choix du schéma pour l'advection dans le fichier "traceur.def" ou via INCA  
73    call iniadvtrac    call iniadvtrac
   
74    CALL iniconst    CALL iniconst
75      CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis)
   ! Lecture du fichier "start.nc" :  
   CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis, time_0)  
   
   ! On remet le calendrier à zéro si demandé :  
   if (raz_date) then  
      print *, 'On réinitialise à la date lue dans la namelist.'  
      annee_ref = anneeref  
      day_ref = dayref  
      day_ini = dayref  
      itau_dyn = 0  
      time_0 = 0.  
   else  
      print *, 'On garde les dates du fichier "start".'  
   endif  
   
76    CALL disvert    CALL disvert
77    CALL inigeom ! initialisation de la géometrie    CALL inigeom ! initialisation de la g\'eometrie
78    CALL inifilr ! initialisation du filtre    CALL inifilr ! initialisation du filtre
79    CALL inidissip    CALL inidissip
80    call init_dyn_phy    call init_dyn_phy
81    
82    ! Initialisation de la physique :    ! Initialisation de la physique :
83    IF (iflag_phys == 1) THEN    IF (iflag_phys) THEN
      rlatd(1)=rlatu(1)  
      rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)  
      rlatd(klon)= rlatu(jjm + 1)  
   
      rlond(1)=0.  
      rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)  
      rlond(klon)= 0.  
   
      cuphy = pack(cu_2d, dyn_phy)  
   
      ! Construct a mask for points in the "v" grid:  
      mask_v = .true.  
      mask_v(2:, 1) = .false.  
      mask_v(iim + 1, 2:) = .false.  
   
      cvphy(:klon - 1) = pack(cv_2d, mask_v)  
      cvphy(klon) = cv_2d(1, jjm)  
      ! (that value of "cv_2d" is used twice in "cvphy")  
   
84       airephy = pack(aire_2d, dyn_phy)       airephy = pack(aire_2d, dyn_phy)
85       CALL suphec       CALL suphec
86       call yoethf       call yoethf
87    ENDIF    ENDIF
88    
89    ! Initialisation des entrées-sorties :    ! Initialisation des entr\'ees-sorties :
90    day_end = day_ini + nday    CALL dynredem0(day_ini + nday, phis)
91    print *, "day_ini = ", day_ini    CALL inithist(dtvr, nqmx, t_ops = iecri * daysec, t_wrt = iecri * daysec)
92    print *, "day_end = ", day_end    CALL initdynav(dtvr, nqmx, t_ops = iperiod * dtvr, t_wrt = periodav * daysec)
   
   CALL dynredem0("restart.nc", day_end, phis)  
   CALL inithist(day_ref, annee_ref, dtvr, nqmx, t_ops = iecri * daysec, &  
        t_wrt = iecri * daysec)  
   CALL initdynav(day_ref, annee_ref, dtvr, nqmx, t_ops = iperiod * dtvr, &  
        t_wrt = periodav * daysec)  
93    call init_dynzon(dt_app = dtvr * iperiod)    call init_dynzon(dt_app = dtvr * iperiod)
94    
95    ! Choix des fréquences de stockage pour le hors-ligne :    CALL conf_guide
96    istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4    CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q)
   istphy = istdyn / iphysiq      
   
   ! Intégration temporelle du modèle :  
   CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)  
97    
98    close(unit_nml)    close(unit_nml)
99    call histclo    call histclo

Legend:
Removed from v.109  
changed lines
  Added in v.224

  ViewVC Help
Powered by ViewVC 1.1.21