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

Diff of /trunk/dyn3d/gcm.f

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

revision 92 by guez, Wed Mar 26 18:16:05 2014 UTC revision 266 by guez, Thu Apr 19 17:54:55 2018 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: 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, iphysiq, nday, conf_gcm, iflag_phys
16    use dimens_m, only: iim, jjm, llm, nqmx    use conf_guide_m, only: conf_guide
17    use dimphy, only: klon    use dimensions, only: iim, jjm, llm, nqmx
18    USE disvert_m, ONLY : disvert    USE disvert_m, ONLY : disvert
19    use dynetat0_m, only: dynetat0, day_ini    use dynetat0_m, only: dynetat0, day_ini
20    use dynredem0_m, only: dynredem0    use dynredem0_m, only: dynredem0
# Line 23  PROGRAM gcm Line 23  PROGRAM gcm
23    use iniadvtrac_m, only: iniadvtrac    use iniadvtrac_m, only: iniadvtrac
24    use inidissip_m, only: inidissip    use inidissip_m, only: inidissip
25    use inifilr_m, only: inifilr    use inifilr_m, only: inifilr
   use initdynav_m, only: initdynav  
26    use inithist_m, only: inithist    use inithist_m, only: inithist
27    use init_dynzon_m, only: init_dynzon    use init_dynzon_m, only: init_dynzon
28    USE ioconf_calendar_m, only: ioconf_calendar    USE ioconf_calendar_m, only: ioconf_calendar
29    use jumble, only: new_unit    use jumble, only: new_unit
30    use leapfrog_m, only: leapfrog    use leapfrog_m, only: leapfrog
31      use netcdf95, only: nf95_close
32    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  
33    use unit_nml_m, only: unit_nml    use unit_nml_m, only: unit_nml
34    use yoethf_m, only: yoethf    use createnewfield_m, only: NbField, Ncid
35    
36    IMPLICIT NONE    IMPLICIT NONE
37    
38    ! Variables dynamiques :    ! Variables dynamiques :
39    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
40    REAL teta(iim + 1, jjm + 1, llm) ! température potentielle    REAL teta(iim + 1, jjm + 1, llm) ! temp\'erature potentielle
41    REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés    REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advect\'es
42    REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)    REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
43    REAL masse(iim + 1, jjm + 1, llm) ! masse d'air    REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
44    REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol    REAL phis(iim + 1, jjm + 1) ! g\'eopotentiel au sol
45    
   ! Variables pour le fichier histoire :  
   REAL time_0 ! time in day, as a fraction of day, in [0, 1[  
   
   ! Calendrier :  
46    LOGICAL:: true_calendar = .false. ! default value    LOGICAL:: true_calendar = .false. ! default value
47      integer i
   logical mask_v(iim + 1, jjm)  
   ! (mask for points in the "v" grid, first index is for longitude,  
   ! second index is for latitude)  
48    
49    namelist /main_nml/true_calendar    namelist /main_nml/true_calendar
50    
# Line 63  PROGRAM gcm Line 54  PROGRAM gcm
54    open(unit_nml, file="used_namelists.txt", status="replace", action="write")    open(unit_nml, file="used_namelists.txt", status="replace", action="write")
55    
56    CALL conf_gcm    CALL conf_gcm
57      call read_comdissnew
58    
59    print *, "Enter namelist 'main_nml'."    print *, "Enter namelist 'main_nml'."
60    read (unit=*, nml=main_nml)    read (unit=*, nml=main_nml)
# Line 75  PROGRAM gcm Line 67  PROGRAM gcm
67       call ioconf_calendar('360d')       call ioconf_calendar('360d')
68    endif    endif
69    
   ! Initialisation des traceurs  
   ! Choix du schéma pour l'advection dans le fichier "traceur.def" ou via INCA  
70    call iniadvtrac    call iniadvtrac
   
71    CALL iniconst    CALL iniconst
72      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 à zero si demandé :  
   if (annee_ref /= anneeref .or. day_ref /= dayref) then  
      print *, 'Attention : les dates initiales lues dans le fichier ' // &  
           '"start" ne correspondent pas à celles lues dans "gcm.def".'  
      if (raz_date) then  
         print *, 'On réinitialise à la date lue dans "gcm.def".'  
         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  
   ELSE  
      raz_date = .false.  
   endif  
   
73    CALL disvert    CALL disvert
74    CALL inigeom ! initialisation de la géometrie    CALL inigeom ! initialisation de la g\'eometrie
75    CALL inifilr ! initialisation du filtre    CALL inifilr ! initialisation du filtre
76    CALL inidissip    CALL inidissip
77    call init_dyn_phy    call init_dyn_phy
78    
79    ! Initialisation de la physique :    ! Initialisation de la physique :
80    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")  
   
81       airephy = pack(aire_2d, dyn_phy)       airephy = pack(aire_2d, dyn_phy)
82       CALL suphec       CALL suphec
      call yoethf  
83    ENDIF    ENDIF
84    
85    ! Initialisation des entrées-sorties :    ! Initialisation des entr\'ees-sorties :
86    day_end = day_ini + nday    CALL dynredem0(day_ini + nday, phis)
87    print *, "day_ini = ", day_ini    CALL inithist(t_ops = dtvr, t_wrt = dtvr)
   print *, "day_end = ", day_end  
   
   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)  
88    call init_dynzon(dt_app = dtvr * iperiod)    call init_dynzon(dt_app = dtvr * iperiod)
89    
90    ! Choix des fréquences de stockage pour le hors-ligne :    CALL conf_guide
91    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)  
92    
93    close(unit_nml)    close(unit_nml)
94    call histclo    call histclo
95    
96      do i = 1, nbfield
97         call nf95_close(Ncid(i))
98      end do
99    
100    print *, 'Simulation finished'    print *, 'Simulation finished'
101    print *, 'Everything is cool'    print *, 'Everything is cool'
102    

Legend:
Removed from v.92  
changed lines
  Added in v.266

  ViewVC Help
Powered by ViewVC 1.1.21