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

Contents of /trunk/Sources/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 139 - (show annotations)
Tue May 26 17:46:03 2015 UTC (8 years, 11 months ago) by guez
File size: 4184 byte(s)
dynetat0 read rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d from
"start.nc" and then these variables were overwritten by
inigeom. Corrected this. Now, inigeom does not compute rlonu, rlatu,
rlonv and rlatv. Moreover, cu_2d, cv_2d, aire_2d are not written to
"restart.nc". Since xprimu, xprimv, xprimm025, xprimp025, rlatu1,
rlatu2, yprimu1, yprimu2 are computed at the same time as rlonu,
rlatu, rlonv, rlatv, and since it would not be convenient to separate
those computations, we decide to write xprimu, xprimv, xprimm025,
xprimp025, rlatu1, rlatu2, yprimu1, yprimu2 into "restart.nc", read
them from "start.nc" and not compute them in inigeom. So, in summary,
"start.nc" contains all the coordinates and their derivatives, and
inigeom only computes the 2D-variables.

Technical details:

Moved variables rlatu, rlonv, rlonu, rlatv, xprimu, xprimv from module
comgeom to module dynetat0_m. Upgraded local variables rlatu1,
yprimu1, rlatu2, yprimu2, xprimm025, xprimp025 of procedure inigeom to
variables of module dynetat0_m.

Removed unused local variable yprimu of procedure inigeom and
corresponding argument yyprimu of fyhyp.

Moved variables clat, clon, grossismx, grossismy, dzoomx, dzoomy,
taux, tauy from module serre to module dynetat0_m (since they are read
from "start.nc"). The default values are now defined in read_serre
instead of in the declarations. Changed name of module serre to
read_serre_m, no more module variable here.

The calls to fxhyp and fyhyp are moved from inigeom to etat0.

Side effects in programs other than gcm: etat0 and read_serre write
variables of module dynetat0; the programs test_fxyp and
test_inter_barxy need more source files.

Removed unused arguments len and nd of cv3_tracer. Removed unused
argument PPSOL of LWU.

Bug fix in test_inter_barxy: forgotten call to read_serre.

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 comgeom, only: aire_2d, cu_2d, cv_2d, inigeom
13 use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond
14 use conf_gcm_m, only: day_step, iperiod, iecri, iphysiq, nday, periodav, &
15 conf_gcm, iflag_phys
16 use conf_guide_m, only: conf_guide
17 use dimens_m, only: iim, jjm, llm, nqmx
18 use dimphy, only: klon
19 USE disvert_m, ONLY : disvert
20 use dynetat0_m, only: rlatu, rlonv, 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 ! Calendrier :
51 LOGICAL:: true_calendar = .false. ! default value
52
53 logical mask_v(iim + 1, jjm)
54 ! (mask for points in the "v" grid, first index is for longitude,
55 ! second index is for latitude)
56
57 integer i
58
59 namelist /main_nml/true_calendar
60
61 !------------------------------------------------------------
62
63 call new_unit(unit_nml)
64 open(unit_nml, file="used_namelists.txt", status="replace", action="write")
65
66 CALL conf_gcm
67
68 print *, "Enter namelist 'main_nml'."
69 read (unit=*, nml=main_nml)
70 write(unit_nml, nml=main_nml)
71
72 ! Choix du calendrier :
73 if (true_calendar) then
74 call ioconf_calendar('gregorian')
75 else
76 call ioconf_calendar('360d')
77 endif
78
79 call iniadvtrac
80 CALL iniconst
81 CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis)
82 CALL disvert
83 CALL inigeom ! initialisation de la g\'eometrie
84 CALL inifilr ! initialisation du filtre
85 CALL inidissip
86 call init_dyn_phy
87
88 ! Initialisation de la physique :
89 IF (iflag_phys == 1) THEN
90 rlatd(1)=rlatu(1)
91 rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)
92 rlatd(klon)= rlatu(jjm + 1)
93
94 rlond(1)=0.
95 rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)
96 rlond(klon)= 0.
97
98 cuphy = pack(cu_2d, dyn_phy)
99
100 ! Construct a mask for points in the "v" grid:
101 mask_v = .true.
102 mask_v(2:, 1) = .false.
103 mask_v(iim + 1, 2:) = .false.
104
105 cvphy(:klon - 1) = pack(cv_2d, mask_v)
106 cvphy(klon) = cv_2d(1, jjm)
107 ! (that value of "cv_2d" is used twice in "cvphy")
108
109 airephy = pack(aire_2d, dyn_phy)
110 CALL suphec
111 call yoethf
112 ENDIF
113
114 ! Initialisation des entr\'ees-sorties :
115 CALL dynredem0("restart.nc", day_ini + nday, phis)
116 CALL inithist(dtvr, nqmx, t_ops = iecri * daysec, t_wrt = iecri * daysec)
117 CALL initdynav(dtvr, nqmx, t_ops = iperiod * dtvr, t_wrt = periodav * daysec)
118 call init_dynzon(dt_app = dtvr * iperiod)
119
120 ! Choix des fr\'equences de stockage pour le hors-ligne :
121 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
122 istphy = istdyn / iphysiq
123
124 CALL conf_guide
125 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q)
126
127 close(unit_nml)
128 call histclo
129
130 do i = 1, nbfield
131 call nf95_close(Ncid(i))
132 end do
133
134 print *, 'Simulation finished'
135 print *, 'Everything is cool'
136
137 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21