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

Annotation of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 55 - (hide 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 guez 3 module dynetat0_m
2    
3     IMPLICIT NONE
4    
5 guez 25 INTEGER day_ini
6    
7 guez 3 contains
8    
9 guez 25 SUBROUTINE dynetat0(vcov, ucov, teta, q, masse, ps, phis, time_0)
10 guez 3
11 guez 38 ! From dynetat0.F, version 1.2, 2004/06/22 11:45:30
12     ! Authors: P. Le Van, L. Fairhead
13 guez 39 ! This procedure reads the initial state of the atmosphere.
14 guez 3
15 guez 39 use comconst, only: im, dtvr, jm, lllm
16 guez 3 use comvert, only: pa
17     use comgeom, only: rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d
18 guez 38 use dimens_m, only: iim, jjm, llm, nqmx
19 guez 3 use ener, only: etot0, ang0, ptot0, stot0, ztot0
20 guez 18 use iniadvtrac_m, only: tname
21 guez 38 use logic, only: fxyhypb, ysinus
22     use serre, only: clon, clat, grossismy, grossismx
23 guez 44 use netcdf95, only: NF95_GET_VAR, nf95_open, nf95_inq_varid, NF95_CLOSE, &
24     NF95_Gw_VAR
25 guez 38 use netcdf, only: NF90_NOWRITE, NF90_NOERR
26 guez 36 use nr_util, only: assert
27 guez 38 use temps, only: day_ref, itau_dyn, annee_ref
28 guez 3
29 guez 55 REAL, intent(out):: vcov(: , :, :) ! (iim + 1, jjm, llm)
30     REAL, intent(out):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm)
31 guez 43 REAL, intent(out):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
32 guez 40 REAL, intent(out):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx)
33 guez 55 REAL, intent(out):: masse(:, :, :) ! (iim + 1, jjm + 1, llm)
34 guez 39 REAL, intent(out):: ps(:, :) ! (iim + 1, jjm + 1) in Pa
35     REAL, intent(out):: phis(:, :) ! (iim + 1, jjm + 1)
36 guez 25 REAL, intent(out):: time_0
37 guez 3
38 guez 44 ! Local variables:
39 guez 38 INTEGER iq
40 guez 44 REAL, pointer:: tab_cntrl(:) ! tableau des paramètres du run
41 guez 38 INTEGER ierr, ncid, varid
42 guez 3
43     !-----------------------------------------------------------------------
44    
45     print *, "Call sequence information: dynetat0"
46    
47 guez 55 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 guez 40 call assert(size(q, 4) == nqmx, "dynetat0 q nqmx")
55 guez 3
56     ! Fichier état initial :
57 guez 25 call nf95_open("start.nc", NF90_NOWRITE, ncid)
58 guez 3
59 guez 38 call nf95_inq_varid(ncid, "controle", varid)
60 guez 44 call NF95_Gw_VAR(ncid, varid, tab_cntrl)
61 guez 3
62 guez 38 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 guez 3
69 guez 38 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 guez 3 itau_dyn = tab_cntrl(31)
85    
86 guez 38 call NF95_INQ_VARID (ncid, "rlonu", varid)
87     call NF95_GET_VAR(ncid, varid, rlonu)
88 guez 3
89 guez 38 call NF95_INQ_VARID (ncid, "rlatu", varid)
90     call NF95_GET_VAR(ncid, varid, rlatu)
91 guez 3
92 guez 38 call NF95_INQ_VARID (ncid, "rlonv", varid)
93     call NF95_GET_VAR(ncid, varid, rlonv)
94 guez 3
95 guez 38 call NF95_INQ_VARID (ncid, "rlatv", varid)
96     call NF95_GET_VAR(ncid, varid, rlatv)
97 guez 3
98 guez 38 call NF95_INQ_VARID (ncid, "cu", varid)
99     call NF95_GET_VAR(ncid, varid, cu_2d)
100 guez 3
101 guez 38 call NF95_INQ_VARID (ncid, "cv", varid)
102     call NF95_GET_VAR(ncid, varid, cv_2d)
103 guez 3
104 guez 38 call NF95_INQ_VARID (ncid, "aire", varid)
105     call NF95_GET_VAR(ncid, varid, aire_2d)
106 guez 3
107 guez 38 call NF95_INQ_VARID (ncid, "phisinit", varid)
108     call NF95_GET_VAR(ncid, varid, phis)
109 guez 3
110 guez 38 call NF95_INQ_VARID (ncid, "temps", varid)
111     call NF95_GET_VAR(ncid, varid, time_0)
112 guez 3
113 guez 38 day_ini = tab_cntrl(30) + INT(time_0)
114     time_0 = time_0 - INT(time_0)
115     ! {0 <= time0 < 1}
116 guez 3
117 guez 44 deallocate(tab_cntrl) ! pointer
118    
119 guez 38 call NF95_INQ_VARID (ncid, "ucov", varid)
120 guez 55 call NF95_GET_VAR(ncid, varid, ucov)
121 guez 3
122 guez 38 call NF95_INQ_VARID (ncid, "vcov", varid)
123 guez 55 call NF95_GET_VAR(ncid, varid, vcov)
124 guez 3
125 guez 38 call NF95_INQ_VARID (ncid, "teta", varid)
126 guez 43 call NF95_GET_VAR(ncid, varid, teta)
127 guez 3
128     DO iq = 1, nqmx
129 guez 38 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 guez 40 q(:, :, :, iq) = 0.
134 guez 3 ELSE
135 guez 40 call NF95_GET_VAR(ncid, varid, q(:, :, :, iq))
136 guez 3 ENDIF
137     ENDDO
138    
139 guez 38 call NF95_INQ_VARID (ncid, "masse", varid)
140 guez 55 call NF95_GET_VAR(ncid, varid, masse)
141 guez 3
142 guez 38 call NF95_INQ_VARID (ncid, "ps", varid)
143 guez 39 call NF95_GET_VAR(ncid, varid, ps)
144 guez 3
145 guez 25 call NF95_CLOSE(ncid)
146 guez 3
147     END SUBROUTINE dynetat0
148    
149     end module dynetat0_m

  ViewVC Help
Powered by ViewVC 1.1.21