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

Contents of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 191 - (show annotations)
Mon May 9 19:56:28 2016 UTC (8 years ago) by guez
Original Path: trunk/Sources/dyn3d/gcm.f
File size: 3461 byte(s)
Extracted the call to read_comdissnew out of conf_gcm.

Made ok_instan a variable of module clesphys, itau_phy a variable of
module phyetat0_m, nid_ins a variable of module ini_histins_m, itap a
variable of new module time_phylmdz, so that histwrite_phy can be
called from any procedure without the need to cascade those variables
into that procedure. Made itau_w a variable of module time_phylmdz so
that it is computed only once per time step of physics.

Extracted variables of module clesphys which were in namelist
conf_phys_nml into their own namelist, clesphys_nml, and created
procedure read_clesphys reading clesphys_nml, to avoid side effect.

No need for double precision in procedure getso4fromfile. Assume there
is a single variable for the whole year in the NetCDF file instead of
one variable per month.

Created generic procedure histwrite_phy and removed procedure
write_histins, following LMDZ. histwrite_phy has only two arguments,
can be called from anywhere, and should manage the logic of writing or
not writing into various history files with various operations. So the
test on ok_instan goes inside histwrite_phy.

Test for raz_date in phyetat0 instead of physiq to avoid side effect.

Created procedure increment_itap to avoid side effect.

Removed unnecessary differences between procedures readsulfate and
readsulfate_pi.

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

  ViewVC Help
Powered by ViewVC 1.1.21