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

Annotation of /trunk/dyn3d/dynredem0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 259 - (hide annotations)
Tue Mar 6 16:19:52 2018 UTC (6 years, 2 months ago) by guez
File size: 8302 byte(s)
Try to clarify the logic. Remove module ener. Move variables from
module ener to module dynetat0_m, where they are defined in program
gcm. In sortvarc, I do not see how ptot0 could be 0, discard this possibility.

Remove dummy argument resetvarc of procedure sortvarc. The difference
is that sortvarc is called by caldyn or caldyn0 so just do different
processing in caldyn and caldyn0 instead of inside sortvarc.

No need for variables ang, etot, ptot, rmsdpdt, rmsv, stot, ztot to be
at module level in module sortvarc_m, downgrade them to arguments of
sortvarc. Instead of modyfying the meaning of ang, etot, ptot,
rmsdpdt, rmsv, stot, ztot from absolute quantities to variations of
these quantities, print the ratio in caldyn.

1 guez 18 MODULE dynredem0_m
2 guez 3
3 guez 7 IMPLICIT NONE
4 guez 3
5 guez 157 INTEGER ncid
6    
7 guez 18 CONTAINS
8 guez 3
9 guez 157 SUBROUTINE dynredem0(iday_end, phis)
10 guez 3
11 guez 138 ! From dyn3d/dynredem.F, version 1.2, 2004/06/22 11:45:30
12     ! \'Ecriture du fichier de red\'emarrage au format NetCDF (initialisation)
13 guez 3
14 guez 62 USE comconst, ONLY: cpp, daysec, dtvr, g, kappa, omeg, rad
15     USE dimens_m, ONLY: iim, jjm, llm, nqmx
16 guez 92 USE disvert_m, ONLY: ap, bp, pa, preff, presnivs
17 guez 139 use dynetat0_m, only: day_ref, annee_ref, clat, clon, dzoomx, dzoomy, &
18     grossismx, grossismy, taux, tauy, rlatu, rlatv, rlonu, rlonv, rlatu1, &
19 guez 259 rlatu2, yprimu1, yprimu2, xprimp025, xprimm025, xprimu, xprimv, ang0, &
20     etot0, ptot0, stot0, ztot0
21 guez 62 USE iniadvtrac_m, ONLY: tname, ttext
22 guez 92 USE ju2ymds_m, ONLY: ju2ymds
23     USE netcdf, ONLY: nf90_clobber, nf90_float, nf90_global, nf90_unlimited
24 guez 157 USE netcdf95, ONLY: nf95_create, nf95_def_dim, nf95_def_var, nf95_enddef, &
25 guez 178 nf95_put_att, nf95_put_var
26 guez 62 USE paramet_m, ONLY: iip1, jjp1, llmp1
27 guez 92 use ymds2ju_m, only: ymds2ju
28 guez 5
29 guez 62 INTEGER, INTENT(IN):: iday_end
30 guez 5
31 guez 227 REAL, INTENT(IN):: phis(:, :) ! (iim + 1, jjm + 1)
32     ! surface geopotential, in m2 s-2
33    
34 guez 62 ! Local:
35 guez 3
36 guez 139 INTEGER iq
37 guez 22 INTEGER, PARAMETER:: length = 100
38 guez 138 REAL tab_cntrl(length) ! tableau des param\`etres du run
39 guez 5
40 guez 116 ! Pour NetCDF :
41 guez 62 INTEGER idim_index
42     INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
43     INTEGER idim_s, idim_sig
44 guez 128 INTEGER dimid_temps
45 guez 157 INTEGER varid
46 guez 140 integer varid_controle, varid_rlonu, varid_rlatu, varid_rlonv, varid_rlatv
47     integer varid_xprimu, varid_xprimv, varid_xprimm025, varid_xprimp025
48     integer varid_rlatu1, varid_rlatu2, varid_yprimu1, varid_yprimu2, varid_ap
49 guez 227 integer varid_bp, varid_presnivs, varid_phis
50 guez 3
51 guez 62 REAL zjulian, hours
52     INTEGER yyears0, jjour0, mmois0
53     CHARACTER(len=30) unites
54 guez 3
55 guez 7 !-----------------------------------------------------------------------
56 guez 3
57 guez 18 PRINT *, 'Call sequence information: dynredem0'
58 guez 3
59 guez 23 CALL ymds2ju(annee_ref, 1, iday_end, 0., zjulian)
60 guez 18 CALL ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
61 guez 5
62 guez 129 tab_cntrl(1) = iim
63     tab_cntrl(2) = jjm
64     tab_cntrl(3) = llm
65     tab_cntrl(4) = day_ref
66     tab_cntrl(5) = annee_ref
67 guez 18 tab_cntrl(6) = rad
68     tab_cntrl(7) = omeg
69     tab_cntrl(8) = g
70     tab_cntrl(9) = cpp
71 guez 7 tab_cntrl(10) = kappa
72     tab_cntrl(11) = daysec
73     tab_cntrl(12) = dtvr
74     tab_cntrl(13) = etot0
75     tab_cntrl(14) = ptot0
76     tab_cntrl(15) = ztot0
77     tab_cntrl(16) = stot0
78     tab_cntrl(17) = ang0
79     tab_cntrl(18) = pa
80     tab_cntrl(19) = preff
81 guez 5
82 guez 138 ! Param\`etres pour le zoom :
83 guez 18 tab_cntrl(20) = clon
84     tab_cntrl(21) = clat
85     tab_cntrl(22) = grossismx
86     tab_cntrl(23) = grossismy
87 guez 113 tab_cntrl(24) = 1.
88     tab_cntrl(25) = dzoomx
89     tab_cntrl(26) = dzoomy
90     tab_cntrl(27) = 0.
91     tab_cntrl(28) = taux
92     tab_cntrl(29) = tauy
93 guez 5
94 guez 129 tab_cntrl(30) = iday_end
95 guez 138 tab_cntrl(31:) = 0.
96 guez 5
97 guez 157 CALL nf95_create("restart.nc", nf90_clobber, ncid)
98 guez 39 CALL nf95_put_att(ncid, nf90_global, 'title', &
99 guez 138 'start file for the dynamics code')
100 guez 5
101 guez 7 ! Definir les dimensions du fichiers:
102 guez 5
103 guez 39 CALL nf95_def_dim(ncid, 'index', length, idim_index)
104     CALL nf95_def_dim(ncid, 'rlonu', iip1, idim_rlonu)
105     CALL nf95_def_dim(ncid, 'rlatu', jjp1, idim_rlatu)
106     CALL nf95_def_dim(ncid, 'rlonv', iip1, idim_rlonv)
107     CALL nf95_def_dim(ncid, 'rlatv', jjm, idim_rlatv)
108     CALL nf95_def_dim(ncid, 'sigs', llm, idim_s)
109     CALL nf95_def_dim(ncid, 'sig', llmp1, idim_sig)
110 guez 128 CALL nf95_def_dim(ncid, 'temps', nf90_unlimited, dimid_temps)
111 guez 5
112 guez 7 ! Definir et enregistrer certains champs invariants:
113 guez 5
114 guez 140 CALL nf95_def_var(ncid, 'controle', nf90_float, idim_index, varid_controle)
115     CALL nf95_put_att(ncid, varid_controle, 'title', 'Parametres de controle')
116 guez 5
117 guez 140 CALL nf95_def_var(ncid, 'rlonu', nf90_float, idim_rlonu, varid_rlonu)
118     CALL nf95_put_att(ncid, varid_rlonu, 'title', 'Longitudes des points U')
119 guez 5
120 guez 140 CALL nf95_def_var(ncid, 'rlatu', nf90_float, idim_rlatu, varid_rlatu)
121     CALL nf95_put_att(ncid, varid_rlatu, 'title', 'Latitudes des points U')
122 guez 5
123 guez 140 CALL nf95_def_var(ncid, 'rlonv', nf90_float, idim_rlonv, varid_rlonv)
124     CALL nf95_put_att(ncid, varid_rlonv, 'title', 'Longitudes des points V')
125 guez 5
126 guez 140 CALL nf95_def_var(ncid, 'rlatv', nf90_float, idim_rlatv, varid_rlatv)
127     CALL nf95_put_att(ncid, varid_rlatv, 'title', 'Latitudes des points V')
128 guez 5
129 guez 140 CALL nf95_def_var(ncid, 'xprimu', nf90_float, idim_rlonu, varid_xprimu)
130     CALL nf95_put_att(ncid, varid_xprimu, 'title', 'dx / dX aux points u')
131 guez 139
132 guez 140 CALL nf95_def_var(ncid, 'xprimv', nf90_float, idim_rlonv, varid_xprimv)
133     CALL nf95_put_att(ncid, varid_xprimv, 'title', 'dx / dX aux points v')
134 guez 139
135 guez 140 CALL nf95_def_var(ncid, 'xprimm025', nf90_float, idim_rlonu, &
136     varid_xprimm025)
137     CALL nf95_def_var(ncid, 'xprimp025', nf90_float, idim_rlonu, &
138     varid_xprimp025)
139 guez 139
140 guez 140 CALL nf95_def_var(ncid, 'rlatu1', nf90_float, idim_rlatv, varid_rlatu1)
141     CALL nf95_def_var(ncid, 'rlatu2', nf90_float, idim_rlatv, varid_rlatu2)
142     CALL nf95_def_var(ncid, 'yprimu1', nf90_float, idim_rlatv, varid_yprimu1)
143     CALL nf95_def_var(ncid, 'yprimu2', nf90_float, idim_rlatv, varid_yprimu2)
144 guez 139
145 guez 140 CALL nf95_def_var(ncid, 'ap', nf90_float, idim_sig, varid_ap)
146     CALL nf95_put_att(ncid, varid_ap, 'title', 'Coefficient A pour hybride')
147 guez 5
148 guez 140 CALL nf95_def_var(ncid, 'bp', nf90_float, idim_sig, varid_bp)
149     CALL nf95_put_att(ncid, varid_bp, 'title', 'Coefficient B pour hybride')
150 guez 5
151 guez 140 CALL nf95_def_var(ncid, 'presnivs', nf90_float, idim_s, varid_presnivs)
152 guez 5
153 guez 7 ! Geopentiel au sol:
154 guez 5
155 guez 227 CALL nf95_def_var(ncid, 'phis', nf90_float, (/idim_rlonv, idim_rlatu/), &
156     varid_phis)
157     CALL nf95_put_att(ncid, varid_phis, 'standard_name', 'surface_geopotential')
158     CALL nf95_put_att(ncid, varid_phis, 'units', 'm2 s-2')
159 guez 5
160 guez 7 ! Definir les variables pour pouvoir les enregistrer plus tard:
161 guez 3
162 guez 128 CALL nf95_def_var(ncid, 'temps', nf90_float, dimid_temps, varid)
163 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Temps de simulation')
164 guez 128 WRITE(unites, fmt = 200) yyears0, mmois0, jjour0
165 guez 18 200 FORMAT ('days since ', I4, '-', I2.2, '-', I2.2, ' 00:00:00')
166 guez 39 CALL nf95_put_att(ncid, varid, 'units', unites)
167 guez 7
168 guez 62 CALL nf95_def_var(ncid, 'ucov', nf90_float, &
169 guez 128 (/idim_rlonu, idim_rlatu, idim_s, dimid_temps/), varid)
170 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Vitesse U')
171 guez 5
172 guez 62 CALL nf95_def_var(ncid, 'vcov', nf90_float, &
173 guez 128 (/idim_rlonv, idim_rlatv, idim_s, dimid_temps/), varid)
174 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Vitesse V')
175 guez 5
176 guez 62 CALL nf95_def_var(ncid, 'teta', nf90_float, &
177 guez 128 (/idim_rlonv, idim_rlatu, idim_s, dimid_temps/), varid)
178 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Temperature')
179 guez 5
180 guez 18 DO iq = 1, nqmx
181 guez 62 CALL nf95_def_var(ncid, tname(iq), nf90_float, &
182 guez 128 (/idim_rlonv, idim_rlatu, idim_s, dimid_temps/), varid)
183 guez 39 CALL nf95_put_att(ncid, varid, 'title', ttext(iq))
184 guez 18 END DO
185 guez 5
186 guez 62 CALL nf95_def_var(ncid, 'masse', nf90_float, &
187 guez 128 (/idim_rlonv, idim_rlatu, idim_s, dimid_temps/), varid)
188 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'C est quoi ?')
189 guez 5
190 guez 62 CALL nf95_def_var(ncid, 'ps', nf90_float, &
191 guez 128 (/idim_rlonv, idim_rlatu, dimid_temps/), varid)
192 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Pression au sol')
193 guez 5
194 guez 39 CALL nf95_enddef(ncid)
195 guez 3
196 guez 140 CALL nf95_put_var(ncid, varid_controle, tab_cntrl)
197     CALL nf95_put_var(ncid, varid_rlonu, rlonu)
198     CALL nf95_put_var(ncid, varid_rlatu, rlatu)
199     CALL nf95_put_var(ncid, varid_rlonv, rlonv)
200     CALL nf95_put_var(ncid, varid_rlatv, rlatv)
201     CALL nf95_put_var(ncid, varid_xprimu, xprimu)
202     CALL nf95_put_var(ncid, varid_xprimv, xprimv)
203     CALL nf95_put_var(ncid, varid_xprimm025, xprimm025)
204     CALL nf95_put_var(ncid, varid_xprimp025, xprimp025)
205     call NF95_PUT_VAR(ncid, varid_rlatu1, rlatu1)
206     call NF95_PUT_VAR(ncid, varid_rlatu2, rlatu2)
207     CALL nf95_put_var(ncid, varid_yprimu1, yprimu1)
208     CALL nf95_put_var(ncid, varid_yprimu2, yprimu2)
209     CALL nf95_put_var(ncid, varid_ap, ap)
210     CALL nf95_put_var(ncid, varid_bp, bp)
211     CALL nf95_put_var(ncid, varid_presnivs, presnivs)
212 guez 227 CALL nf95_put_var(ncid, varid_phis, phis)
213 guez 3
214 guez 18 PRINT *, 'iim, jjm, llm, iday_end', iim, jjm, llm, iday_end
215     PRINT *, 'rad, omeg, g, cpp, kappa', rad, omeg, g, cpp, kappa
216    
217 guez 7 END SUBROUTINE dynredem0
218    
219 guez 18 END MODULE dynredem0_m

  ViewVC Help
Powered by ViewVC 1.1.21