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

Contents of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (show annotations)
Fri Feb 28 17:52:47 2014 UTC (10 years, 2 months ago) by guez
Original Path: trunk/dyn3d/dynetat0.f90
File size: 5065 byte(s)
Moved procedure iniconst inside module comconst. Removed useless
variables of module comconst: im, jm, lllm, imp1, jmp1, lllmm1,
lllmp1, lcl, cotot, unsim. Move definition of dtvr that was in
dynetat0 and etat0 to iniconst. Moved comparison of dtvr from day_step
and start.nc that was in gcm to dynetat0. Moved call to disvert out of
iniconst. Moved call to iniconst in gcm before call to dynetat0.

Removed unused argument pvteta of physiq (not used either in LMDZ).

1 module dynetat0_m
2
3 IMPLICIT NONE
4
5 INTEGER day_ini
6
7 contains
8
9 SUBROUTINE dynetat0(vcov, ucov, teta, q, masse, ps, phis, time_0)
10
11 ! From dynetat0.F, version 1.2, 2004/06/22 11:45:30
12 ! Authors: P. Le Van, L. Fairhead
13 ! This procedure reads the initial state of the atmosphere.
14
15 use comconst, only: dtvr
16 use comgeom, only: rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d
17 use conf_gcm_m, only: fxyhypb, ysinus
18 use dimens_m, only: iim, jjm, llm, nqmx
19 use disvert_m, only: pa
20 use ener, only: etot0, ang0, ptot0, stot0, ztot0
21 use iniadvtrac_m, only: tname
22 use netcdf, only: NF90_NOWRITE, NF90_NOERR
23 use netcdf95, only: NF95_GET_VAR, nf95_open, nf95_inq_varid, NF95_CLOSE, &
24 NF95_Gw_VAR
25 use nr_util, only: assert
26 use serre, only: clon, clat, grossismy, grossismx
27 use temps, only: day_ref, itau_dyn, annee_ref
28
29 REAL, intent(out):: vcov(: , :, :) ! (iim + 1, jjm, llm)
30 REAL, intent(out):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm)
31 REAL, intent(out):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
32 REAL, intent(out):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx)
33 REAL, intent(out):: masse(:, :, :) ! (iim + 1, jjm + 1, llm)
34 REAL, intent(out):: ps(:, :) ! (iim + 1, jjm + 1) in Pa
35 REAL, intent(out):: phis(:, :) ! (iim + 1, jjm + 1)
36 REAL, intent(out):: time_0
37
38 ! Local variables:
39 INTEGER iq
40 REAL, pointer:: tab_cntrl(:) ! tableau des paramètres du run
41 INTEGER ierr, ncid, varid
42
43 !-----------------------------------------------------------------------
44
45 print *, "Call sequence information: dynetat0"
46
47 call assert((/size(ucov, 1), size(vcov, 1), size(masse, 1), size(ps, 1), &
48 size(phis, 1), size(q, 1), size(teta, 1)/) == iim + 1, "dynetat0 iim")
49 call assert((/size(ucov, 2), size(vcov, 2) + 1, size(masse, 2), &
50 size(ps, 2), size(phis, 2), size(q, 2), size(teta, 2)/) == jjm + 1, &
51 "dynetat0 jjm")
52 call assert((/size(vcov, 3), size(ucov, 3), size(teta, 3), size(q, 3), &
53 size(masse, 3)/) == llm, "dynetat0 llm")
54 call assert(size(q, 4) == nqmx, "dynetat0 q nqmx")
55
56 ! Fichier état initial :
57 call nf95_open("start.nc", NF90_NOWRITE, ncid)
58
59 call nf95_inq_varid(ncid, "controle", varid)
60 call NF95_Gw_VAR(ncid, varid, tab_cntrl)
61
62 call assert(int(tab_cntrl(1)) == iim, "dynetat0 tab_cntrl iim")
63 call assert(int(tab_cntrl(2)) == jjm, "dynetat0 tab_cntrl jjm")
64 call assert(int(tab_cntrl(3)) == llm, "dynetat0 tab_cntrl llm")
65
66 day_ref = int(tab_cntrl(4))
67 annee_ref = int(tab_cntrl(5))
68
69 IF (dtvr /= tab_cntrl(12)) THEN
70 print *, 'Warning: the time steps from day_step and "start.nc" ' // &
71 'are different.'
72 print *, 'dtvr from day_step: ', dtvr
73 print *, 'dtvr from "start.nc": ', tab_cntrl(12)
74 print *, 'Using the value from day_step.'
75 ENDIF
76
77 etot0 = tab_cntrl(13)
78 ptot0 = tab_cntrl(14)
79 ztot0 = tab_cntrl(15)
80 stot0 = tab_cntrl(16)
81 ang0 = tab_cntrl(17)
82 pa = tab_cntrl(18)
83 clon = tab_cntrl(20)
84 clat = tab_cntrl(21)
85 grossismx = tab_cntrl(22)
86 grossismy = tab_cntrl(23)
87 fxyhypb = tab_cntrl(24) == 1.
88 if (.not. fxyhypb) ysinus = tab_cntrl(27) == 1.
89 itau_dyn = tab_cntrl(31)
90
91 call NF95_INQ_VARID (ncid, "rlonu", varid)
92 call NF95_GET_VAR(ncid, varid, rlonu)
93
94 call NF95_INQ_VARID (ncid, "rlatu", varid)
95 call NF95_GET_VAR(ncid, varid, rlatu)
96
97 call NF95_INQ_VARID (ncid, "rlonv", varid)
98 call NF95_GET_VAR(ncid, varid, rlonv)
99
100 call NF95_INQ_VARID (ncid, "rlatv", varid)
101 call NF95_GET_VAR(ncid, varid, rlatv)
102
103 call NF95_INQ_VARID (ncid, "cu", varid)
104 call NF95_GET_VAR(ncid, varid, cu_2d)
105
106 call NF95_INQ_VARID (ncid, "cv", varid)
107 call NF95_GET_VAR(ncid, varid, cv_2d)
108
109 call NF95_INQ_VARID (ncid, "aire", varid)
110 call NF95_GET_VAR(ncid, varid, aire_2d)
111
112 call NF95_INQ_VARID (ncid, "phisinit", varid)
113 call NF95_GET_VAR(ncid, varid, phis)
114
115 call NF95_INQ_VARID (ncid, "temps", varid)
116 call NF95_GET_VAR(ncid, varid, time_0)
117
118 day_ini = tab_cntrl(30) + INT(time_0)
119 time_0 = time_0 - INT(time_0)
120 ! {0 <= time0 < 1}
121
122 deallocate(tab_cntrl) ! pointer
123
124 call NF95_INQ_VARID (ncid, "ucov", varid)
125 call NF95_GET_VAR(ncid, varid, ucov)
126
127 call NF95_INQ_VARID (ncid, "vcov", varid)
128 call NF95_GET_VAR(ncid, varid, vcov)
129
130 call NF95_INQ_VARID (ncid, "teta", varid)
131 call NF95_GET_VAR(ncid, varid, teta)
132
133 DO iq = 1, nqmx
134 call NF95_INQ_VARID(ncid, tname(iq), varid, ierr)
135 IF (ierr /= NF90_NOERR) THEN
136 PRINT *, 'dynetat0: "' // tname(iq) // '" not found, ' // &
137 "setting it to zero..."
138 q(:, :, :, iq) = 0.
139 ELSE
140 call NF95_GET_VAR(ncid, varid, q(:, :, :, iq))
141 ENDIF
142 ENDDO
143
144 call NF95_INQ_VARID (ncid, "masse", varid)
145 call NF95_GET_VAR(ncid, varid, masse)
146
147 call NF95_INQ_VARID (ncid, "ps", varid)
148 call NF95_GET_VAR(ncid, varid, ps)
149
150 call NF95_CLOSE(ncid)
151
152 END SUBROUTINE dynetat0
153
154 end module dynetat0_m

  ViewVC Help
Powered by ViewVC 1.1.21