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

Annotation of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 168 - (hide annotations)
Wed Sep 9 10:41:47 2015 UTC (8 years, 8 months ago) by guez
Original Path: trunk/Sources/dyn3d/gcm.f
File size: 3423 byte(s)
In order to be able to choose finer resolutions, set large memory
model in compiler options and use dynamic libraries.

Variables rlatd, rlond, cuphy and cvphy of module comgeomphy were
never used. (In LMDZ, they are used only for Orchid.)

There is a bug in PGI Fortran 13.10 that does not accept the
combination of forall, pack and spread in regr_pr_av and
regr_pr_int. In order to circumvent this bug, created the function
gr_dyn_phy.

In program test_inifilr, use a single latitude coordinate for north
and south.

1 guez 3 PROGRAM gcm
2    
3 guez 36 ! Authors: P. Le Van, L. Fairhead, F. Hourdin
4     ! From "gcm.F", version 1.4, 2006/04/04 15:05:16
5 guez 3
6 guez 139 ! General circulation model of LMD. Avec coordonn\'ee verticale
7     ! hybride, avec nouveaux op\'erateurs de dissipation "*" ("gradiv2",
8     ! "divgrad2", "nxgraro2"). Possibilit\'e de choisir le sch\'ema pour
9 guez 38 ! l'advection de "q", en modifiant "iadv" dans "traceur.def".
10    
11 guez 79 use comconst, only: daysec, dtvr, iniconst
12 guez 168 use comgeom, only: aire_2d, inigeom
13     use comgeomphy, only: airephy
14 guez 129 use conf_gcm_m, only: day_step, iperiod, iecri, iphysiq, nday, periodav, &
15     conf_gcm, iflag_phys
16 guez 115 use conf_guide_m, only: conf_guide
17 guez 26 use dimens_m, only: iim, jjm, llm, nqmx
18     use dimphy, only: klon
19 guez 79 USE disvert_m, ONLY : disvert
20 guez 168 use dynetat0_m, only: dynetat0, day_ini
21 guez 26 use dynredem0_m, only: dynredem0
22 guez 3 use grid_change, only: dyn_phy, init_dyn_phy
23 guez 61 use histclo_m, only: histclo
24 guez 18 use iniadvtrac_m, only: iniadvtrac
25 guez 26 use inidissip_m, only: inidissip
26 guez 54 use inifilr_m, only: inifilr
27 guez 26 use initdynav_m, only: initdynav
28     use inithist_m, only: inithist
29 guez 57 use init_dynzon_m, only: init_dynzon
30 guez 92 USE ioconf_calendar_m, only: ioconf_calendar
31 guez 57 use jumble, only: new_unit
32 guez 3 use leapfrog_m, only: leapfrog
33 guez 108 use netcdf95, only: nf95_close
34 guez 37 use suphec_m, only: suphec
35 guez 26 use tracstoke, only: istdyn, istphy
36 guez 57 use unit_nml_m, only: unit_nml
37 guez 38 use yoethf_m, only: yoethf
38 guez 110 use createnewfield_m, only: NbField, Ncid
39 guez 3
40     IMPLICIT NONE
41    
42     ! Variables dynamiques :
43 guez 55 REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm) ! vent covariant
44 guez 139 REAL teta(iim + 1, jjm + 1, llm) ! temp\'erature potentielle
45     REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advect\'es
46 guez 39 REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
47 guez 55 REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
48 guez 139 REAL phis(iim + 1, jjm + 1) ! g\'eopotentiel au sol
49 guez 3
50     LOGICAL:: true_calendar = .false. ! default value
51 guez 108 integer i
52    
53 guez 3 namelist /main_nml/true_calendar
54    
55     !------------------------------------------------------------
56    
57 guez 57 call new_unit(unit_nml)
58 guez 79 open(unit_nml, file="used_namelists.txt", status="replace", action="write")
59 guez 57
60     CALL conf_gcm
61    
62 guez 3 print *, "Enter namelist 'main_nml'."
63     read (unit=*, nml=main_nml)
64 guez 57 write(unit_nml, nml=main_nml)
65 guez 3
66     ! Choix du calendrier :
67     if (true_calendar) then
68     call ioconf_calendar('gregorian')
69     else
70     call ioconf_calendar('360d')
71     endif
72    
73 guez 23 call iniadvtrac
74 guez 79 CALL iniconst
75 guez 128 CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis)
76 guez 79 CALL disvert
77 guez 139 CALL inigeom ! initialisation de la g\'eometrie
78 guez 36 CALL inifilr ! initialisation du filtre
79 guez 27 CALL inidissip
80 guez 3 call init_dyn_phy
81    
82     ! Initialisation de la physique :
83     IF (iflag_phys == 1) THEN
84 guez 37 airephy = pack(aire_2d, dyn_phy)
85     CALL suphec
86 guez 38 call yoethf
87 guez 3 ENDIF
88    
89 guez 139 ! Initialisation des entr\'ees-sorties :
90 guez 157 CALL dynredem0(day_ini + nday, phis)
91 guez 129 CALL inithist(dtvr, nqmx, t_ops = iecri * daysec, t_wrt = iecri * daysec)
92     CALL initdynav(dtvr, nqmx, t_ops = iperiod * dtvr, t_wrt = periodav * daysec)
93 guez 57 call init_dynzon(dt_app = dtvr * iperiod)
94 guez 3
95 guez 139 ! Choix des fr\'equences de stockage pour le hors-ligne :
96 guez 36 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
97 guez 3 istphy = istdyn / iphysiq
98    
99 guez 115 CALL conf_guide
100 guez 128 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q)
101 guez 3
102 guez 68 close(unit_nml)
103 guez 10 call histclo
104 guez 108
105     do i = 1, nbfield
106 guez 109 call nf95_close(Ncid(i))
107 guez 108 end do
108    
109 guez 10 print *, 'Simulation finished'
110     print *, 'Everything is cool'
111    
112 guez 3 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21