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

Contents of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21