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

Contents of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 13 - (show annotations)
Fri Jul 25 19:59:34 2008 UTC (15 years, 9 months ago) by guez
Original Path: trunk/libf/dyn3d/dynetat0.f90
File size: 6510 byte(s)
-- Minor change of behaviour:

"etat0" does not compute "rugsrel" nor "radpas". Deleted arguments
"radpas" and "rugsrel" of "phyredem". Deleted argument "rugsrel" of
"phyetat0". "startphy.nc" does not contain the variable "RUGSREL". In
"physiq", "rugoro" is set to 0 if not "ok_orodr". The whole program
"etat0_lim" does not use "clesphys2".

-- Minor modification of input/output:

Created subroutine "read_clesphys2". Variables of "clesphys2" are read
in "read_clesphys2" instead of "conf_gcm". "printflag" does not print
variables of "clesphys2".

-- Should not change any result at run time:

References to module "numer_rec" instead of individual modules of
"Numer_rec_Lionel".

Deleted argument "clesphy0" of "calfis", "physiq", "conf_gcm",
"leapfrog", "phyetat0". Deleted variable "clesphy0" in
"gcm". "phyetat0" does not modify variables of "clesphys2".

The program unit "gcm" does not modify "itau_phy".

Added some "intent" attributes.

"regr11_lint" does not call "polint".

1 module dynetat0_m
2
3 ! This module is clean: no C preprocessor directive, no include line.
4
5 IMPLICIT NONE
6
7 contains
8
9 SUBROUTINE dynetat0(vcov, ucov, teta, q, masse, ps, phis, time)
10
11 ! From dynetat0.F, version 1.2 2004/06/22 11:45:30
12
13 ! Authors: P. Le Van, L. Fairhead
14 ! Objet : lecture de l'état initial
15
16 use dimens_m, only: iim, jjm, llm, nqmx
17 use comconst, only: im, cpp, dtvr, g, kappa, jm, lllm, omeg, rad
18 use comvert, only: pa
19 use logic, only: fxyhypb, ysinus
20 use comgeom, only: rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d
21 use serre, only: clon, clat, grossismy, grossismx
22 use temps, only: day_ref, day_ini, itau_dyn, annee_ref
23 use ener, only: etot0, ang0, ptot0, stot0, ztot0
24 use advtrac_m, only: tname
25 use netcdf95, only: nf95_open, nf95_inq_varid, handle_err, NF95_CLOSE
26 use netcdf, only: NF90_NOWRITE, NF90_GET_VAR, NF90_NOERR
27 use numer_rec, only: assert
28
29 ! Arguments:
30 REAL, intent(out):: vcov(: , :), ucov(:, :), teta(:, :)
31 REAL, intent(out):: q(:, :, :), masse(:, :)
32 REAL, intent(out):: ps(:) ! in Pa
33 REAL, intent(out):: phis(:, :)
34 REAL, intent(out):: time
35
36 ! Variables
37 INTEGER length, iq
38 PARAMETER (length = 100)
39 REAL tab_cntrl(length) ! tableau des parametres du run
40 INTEGER ierr, nid, nvarid
41
42 !-----------------------------------------------------------------------
43
44 print *, "Call sequence information: dynetat0"
45
46 call assert(size(vcov, 1) == (iim + 1) * jjm, "dynetat0 vcov 1")
47 call assert((/size(ucov, 1), size(teta, 1), size(q, 1), size(masse, 1), &
48 size(ps)/) == (iim + 1) * (jjm + 1), "dynetat0 (iim + 1) * (jjm + 1)")
49 call assert(shape(phis) == (/iim + 1, jjm + 1/), "dynetat0 phis")
50 call assert((/size(vcov, 2), size(ucov, 2), size(teta, 2), size(q, 2), &
51 size(masse, 2)/) == llm, "dynetat0 llm")
52 call assert(size(q, 3) == nqmx, "dynetat0 q 3")
53
54 ! Fichier état initial :
55 call nf95_open("start.nc", NF90_NOWRITE, nid)
56
57 call nf95_inq_varid(nid, "controle", nvarid)
58 ierr = NF90_GET_VAR(nid, nvarid, tab_cntrl)
59 call handle_err("dynetat0, controle", ierr, nid)
60
61 im = int(tab_cntrl(1))
62 jm = int(tab_cntrl(2))
63 lllm = int(tab_cntrl(3))
64 day_ref = int(tab_cntrl(4))
65 annee_ref = int(tab_cntrl(5))
66 omeg = tab_cntrl(7)
67 dtvr = tab_cntrl(12)
68 etot0 = tab_cntrl(13)
69 ptot0 = tab_cntrl(14)
70 ztot0 = tab_cntrl(15)
71 stot0 = tab_cntrl(16)
72 ang0 = tab_cntrl(17)
73 pa = tab_cntrl(18)
74 clon = tab_cntrl(20)
75 clat = tab_cntrl(21)
76 grossismx = tab_cntrl(22)
77 grossismy = tab_cntrl(23)
78
79 IF (tab_cntrl(24) == 1.) THEN
80 fxyhypb = .TRUE.
81 ELSE
82 fxyhypb = .FALSE.
83 ysinus = .FALSE.
84 IF (tab_cntrl(27) == 1.) ysinus = .TRUE.
85 ENDIF
86
87 day_ini = tab_cntrl(30)
88 itau_dyn = tab_cntrl(31)
89
90 PRINT *, 'rad = ', rad
91 PRINT *, 'omeg = ', omeg
92 PRINT *, 'g = ', g
93 PRINT *, 'cpp = ', cpp
94 PRINT *, 'kappa = ', kappa
95
96 IF (im /= iim) THEN
97 PRINT 1, im, iim
98 STOP 1
99 ELSE IF (jm /= jjm) THEN
100 PRINT 2, jm, jjm
101 STOP 1
102 ELSE IF (lllm /= llm) THEN
103 PRINT 3, lllm, llm
104 STOP 1
105 ENDIF
106
107 call NF95_INQ_VARID (nid, "rlonu", nvarid)
108 ierr = NF90_GET_VAR(nid, nvarid, rlonu)
109 call handle_err("dynetat0, rlonu", ierr, nid)
110
111 call NF95_INQ_VARID (nid, "rlatu", nvarid)
112 ierr = NF90_GET_VAR(nid, nvarid, rlatu)
113 call handle_err("dynetat0, rlatu", ierr, nid)
114
115 call NF95_INQ_VARID (nid, "rlonv", nvarid)
116 ierr = NF90_GET_VAR(nid, nvarid, rlonv)
117 call handle_err("dynetat0, rlonv", ierr, nid)
118
119 call NF95_INQ_VARID (nid, "rlatv", nvarid)
120 ierr = NF90_GET_VAR(nid, nvarid, rlatv)
121 call handle_err("dynetat0, rlatv", ierr, nid)
122
123 call NF95_INQ_VARID (nid, "cu", nvarid)
124 ierr = NF90_GET_VAR(nid, nvarid, cu_2d)
125 call handle_err("dynetat0, cu", ierr, nid)
126
127 call NF95_INQ_VARID (nid, "cv", nvarid)
128 ierr = NF90_GET_VAR(nid, nvarid, cv_2d)
129 call handle_err("dynetat0, cv", ierr, nid)
130
131 call NF95_INQ_VARID (nid, "aire", nvarid)
132 ierr = NF90_GET_VAR(nid, nvarid, aire_2d)
133 call handle_err("dynetat0, aire", ierr, nid)
134
135 call NF95_INQ_VARID (nid, "phisinit", nvarid)
136 ierr = NF90_GET_VAR(nid, nvarid, phis)
137 call handle_err("dynetat0, phisinit", ierr, nid)
138
139 call NF95_INQ_VARID (nid, "temps", nvarid)
140 ierr = NF90_GET_VAR(nid, nvarid, time)
141 call handle_err("dynetat0, temps", ierr, nid)
142
143 call NF95_INQ_VARID (nid, "ucov", nvarid)
144 ierr = NF90_GET_VAR(nid, nvarid, ucov, count=(/iim + 1, jjm + 1, llm/))
145 call handle_err("dynetat0, ucov", ierr, nid)
146
147 call NF95_INQ_VARID (nid, "vcov", nvarid)
148 ierr = NF90_GET_VAR(nid, nvarid, vcov, count=(/iim + 1, jjm, llm/))
149 call handle_err("dynetat0, vcov", ierr, nid)
150
151 call NF95_INQ_VARID (nid, "teta", nvarid)
152 ierr = NF90_GET_VAR(nid, nvarid, teta, count=(/iim + 1, jjm + 1, llm/))
153 call handle_err("dynetat0, teta", ierr, nid)
154
155 DO iq = 1, nqmx
156 call NF95_INQ_VARID(nid, tname(iq), nvarid, ierr)
157 IF (ierr /= NF90_NOERR) THEN
158 PRINT *, 'dynetat0: le champ "' // tname(iq) // '" est absent, ' // &
159 "il est donc initialisé à zéro."
160 q(:, :, iq) = 0.
161 ELSE
162 ierr = NF90_GET_VAR(nid, nvarid, q(:, :, iq), &
163 count=(/iim + 1, jjm + 1, llm/))
164 call handle_err("dynetat0, " // tname(iq), ierr, nid)
165 ENDIF
166 ENDDO
167
168 call NF95_INQ_VARID (nid, "masse", nvarid)
169 ierr = NF90_GET_VAR(nid, nvarid, masse, count=(/iim + 1, jjm + 1, llm/))
170 call handle_err("dynetat0, masse", ierr, nid)
171
172 call NF95_INQ_VARID (nid, "ps", nvarid)
173 ierr = NF90_GET_VAR(nid, nvarid, ps, count=(/iim + 1, jjm + 1/))
174 call handle_err("dynetat0, ps", ierr, nid)
175
176 call NF95_CLOSE(nid)
177
178 day_ini=day_ini+INT(time)
179 time=time-INT(time)
180
181 1 FORMAT(//10x, 'la valeur de im =', i4, 2x, &
182 'lue sur le fichier de demarrage est differente de la valeur ' &
183 // 'parametree iim =', i4//)
184 2 FORMAT(//10x, 'la valeur de jm =', i4, 2x, &
185 'lue sur le fichier de demarrage est differente de la valeur ' &
186 // 'parametree jjm =', i4//)
187 3 FORMAT(//10x, 'la valeur de lmax =', i4, 2x, &
188 'lue sur le fichier demarrage est differente de la valeur ' &
189 // 'parametree llm =', i4//)
190
191 END SUBROUTINE dynetat0
192
193 end module dynetat0_m

  ViewVC Help
Powered by ViewVC 1.1.21