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

Contents of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 55 - (show annotations)
Mon Dec 12 13:25:01 2011 UTC (12 years, 5 months ago) by guez
Original Path: trunk/libf/dyn3d/dynetat0.f90
File size: 4816 byte(s)
-- In procedure "bilan_dyn", replaced average of "zvq" by integral of
"zvq", following a comment of Francis Codron :

Le calcul actuel donne des unités peu pratiques : transports de
chaleur en K m / s par exemple. C'est bien pour les sorties à 2
dimensions, latitude et pression, car alors le transport ne dépend pas
de l'espacement des niveaux, mieux pour comparer ou tracer en latitude
et pression. Par contre, quand on somme sur la verticale, on
préfèrerait avoir des transports d'énergie en watts, ou au moins an K
kg / s (à multiplier par "Cp" ou "L"). On doit pouvoir recalculer le
transport intégré à partir des fichiers de sortie, mais c'est embêtant
(calcul de "cv").

-- Gathered files in directory Dissipation.

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: im, dtvr, jm, lllm
16 use comvert, only: pa
17 use comgeom, only: rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d
18 use dimens_m, only: iim, jjm, llm, nqmx
19 use ener, only: etot0, ang0, ptot0, stot0, ztot0
20 use iniadvtrac_m, only: tname
21 use logic, only: fxyhypb, ysinus
22 use serre, only: clon, clat, grossismy, grossismx
23 use netcdf95, only: NF95_GET_VAR, nf95_open, nf95_inq_varid, NF95_CLOSE, &
24 NF95_Gw_VAR
25 use netcdf, only: NF90_NOWRITE, NF90_NOERR
26 use nr_util, only: assert
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 im = int(tab_cntrl(1))
63 jm = int(tab_cntrl(2))
64 lllm = int(tab_cntrl(3))
65 call assert(im == iim, "dynetat0 im iim")
66 call assert(jm == jjm, "dynetat0 jm jjm")
67 call assert(lllm == llm, "dynetat0 lllm llm")
68
69 day_ref = int(tab_cntrl(4))
70 annee_ref = int(tab_cntrl(5))
71 dtvr = tab_cntrl(12)
72 etot0 = tab_cntrl(13)
73 ptot0 = tab_cntrl(14)
74 ztot0 = tab_cntrl(15)
75 stot0 = tab_cntrl(16)
76 ang0 = tab_cntrl(17)
77 pa = tab_cntrl(18)
78 clon = tab_cntrl(20)
79 clat = tab_cntrl(21)
80 grossismx = tab_cntrl(22)
81 grossismy = tab_cntrl(23)
82 fxyhypb = tab_cntrl(24) == 1.
83 if (.not. fxyhypb) ysinus = tab_cntrl(27) == 1.
84 itau_dyn = tab_cntrl(31)
85
86 call NF95_INQ_VARID (ncid, "rlonu", varid)
87 call NF95_GET_VAR(ncid, varid, rlonu)
88
89 call NF95_INQ_VARID (ncid, "rlatu", varid)
90 call NF95_GET_VAR(ncid, varid, rlatu)
91
92 call NF95_INQ_VARID (ncid, "rlonv", varid)
93 call NF95_GET_VAR(ncid, varid, rlonv)
94
95 call NF95_INQ_VARID (ncid, "rlatv", varid)
96 call NF95_GET_VAR(ncid, varid, rlatv)
97
98 call NF95_INQ_VARID (ncid, "cu", varid)
99 call NF95_GET_VAR(ncid, varid, cu_2d)
100
101 call NF95_INQ_VARID (ncid, "cv", varid)
102 call NF95_GET_VAR(ncid, varid, cv_2d)
103
104 call NF95_INQ_VARID (ncid, "aire", varid)
105 call NF95_GET_VAR(ncid, varid, aire_2d)
106
107 call NF95_INQ_VARID (ncid, "phisinit", varid)
108 call NF95_GET_VAR(ncid, varid, phis)
109
110 call NF95_INQ_VARID (ncid, "temps", varid)
111 call NF95_GET_VAR(ncid, varid, time_0)
112
113 day_ini = tab_cntrl(30) + INT(time_0)
114 time_0 = time_0 - INT(time_0)
115 ! {0 <= time0 < 1}
116
117 deallocate(tab_cntrl) ! pointer
118
119 call NF95_INQ_VARID (ncid, "ucov", varid)
120 call NF95_GET_VAR(ncid, varid, ucov)
121
122 call NF95_INQ_VARID (ncid, "vcov", varid)
123 call NF95_GET_VAR(ncid, varid, vcov)
124
125 call NF95_INQ_VARID (ncid, "teta", varid)
126 call NF95_GET_VAR(ncid, varid, teta)
127
128 DO iq = 1, nqmx
129 call NF95_INQ_VARID(ncid, tname(iq), varid, ierr)
130 IF (ierr /= NF90_NOERR) THEN
131 PRINT *, 'dynetat0: "' // tname(iq) // '" not found, ' // &
132 "setting it to zero..."
133 q(:, :, :, iq) = 0.
134 ELSE
135 call NF95_GET_VAR(ncid, varid, q(:, :, :, iq))
136 ENDIF
137 ENDDO
138
139 call NF95_INQ_VARID (ncid, "masse", varid)
140 call NF95_GET_VAR(ncid, varid, masse)
141
142 call NF95_INQ_VARID (ncid, "ps", varid)
143 call NF95_GET_VAR(ncid, varid, ps)
144
145 call NF95_CLOSE(ncid)
146
147 END SUBROUTINE dynetat0
148
149 end module dynetat0_m

  ViewVC Help
Powered by ViewVC 1.1.21