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

Annotation of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (hide 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 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 79 use comconst, only: dtvr
16 guez 3 use comgeom, only: rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d
17 guez 67 use conf_gcm_m, only: fxyhypb, ysinus
18 guez 38 use dimens_m, only: iim, jjm, llm, nqmx
19 guez 67 use disvert_m, only: pa
20 guez 3 use ener, only: etot0, ang0, ptot0, stot0, ztot0
21 guez 18 use iniadvtrac_m, only: tname
22 guez 67 use netcdf, only: NF90_NOWRITE, NF90_NOERR
23 guez 44 use netcdf95, only: NF95_GET_VAR, nf95_open, nf95_inq_varid, NF95_CLOSE, &
24     NF95_Gw_VAR
25 guez 36 use nr_util, only: assert
26 guez 67 use serre, only: clon, clat, grossismy, grossismx
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 79 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 guez 3
66 guez 38 day_ref = int(tab_cntrl(4))
67     annee_ref = int(tab_cntrl(5))
68 guez 79
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 guez 38 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 guez 3 itau_dyn = tab_cntrl(31)
90    
91 guez 38 call NF95_INQ_VARID (ncid, "rlonu", varid)
92     call NF95_GET_VAR(ncid, varid, rlonu)
93 guez 3
94 guez 38 call NF95_INQ_VARID (ncid, "rlatu", varid)
95     call NF95_GET_VAR(ncid, varid, rlatu)
96 guez 3
97 guez 38 call NF95_INQ_VARID (ncid, "rlonv", varid)
98     call NF95_GET_VAR(ncid, varid, rlonv)
99 guez 3
100 guez 38 call NF95_INQ_VARID (ncid, "rlatv", varid)
101     call NF95_GET_VAR(ncid, varid, rlatv)
102 guez 3
103 guez 38 call NF95_INQ_VARID (ncid, "cu", varid)
104     call NF95_GET_VAR(ncid, varid, cu_2d)
105 guez 3
106 guez 38 call NF95_INQ_VARID (ncid, "cv", varid)
107     call NF95_GET_VAR(ncid, varid, cv_2d)
108 guez 3
109 guez 38 call NF95_INQ_VARID (ncid, "aire", varid)
110     call NF95_GET_VAR(ncid, varid, aire_2d)
111 guez 3
112 guez 38 call NF95_INQ_VARID (ncid, "phisinit", varid)
113     call NF95_GET_VAR(ncid, varid, phis)
114 guez 3
115 guez 38 call NF95_INQ_VARID (ncid, "temps", varid)
116     call NF95_GET_VAR(ncid, varid, time_0)
117 guez 3
118 guez 38 day_ini = tab_cntrl(30) + INT(time_0)
119     time_0 = time_0 - INT(time_0)
120     ! {0 <= time0 < 1}
121 guez 3
122 guez 44 deallocate(tab_cntrl) ! pointer
123    
124 guez 38 call NF95_INQ_VARID (ncid, "ucov", varid)
125 guez 55 call NF95_GET_VAR(ncid, varid, ucov)
126 guez 3
127 guez 38 call NF95_INQ_VARID (ncid, "vcov", varid)
128 guez 55 call NF95_GET_VAR(ncid, varid, vcov)
129 guez 3
130 guez 38 call NF95_INQ_VARID (ncid, "teta", varid)
131 guez 43 call NF95_GET_VAR(ncid, varid, teta)
132 guez 3
133     DO iq = 1, nqmx
134 guez 38 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 guez 40 q(:, :, :, iq) = 0.
139 guez 3 ELSE
140 guez 40 call NF95_GET_VAR(ncid, varid, q(:, :, :, iq))
141 guez 3 ENDIF
142     ENDDO
143    
144 guez 38 call NF95_INQ_VARID (ncid, "masse", varid)
145 guez 55 call NF95_GET_VAR(ncid, varid, masse)
146 guez 3
147 guez 38 call NF95_INQ_VARID (ncid, "ps", varid)
148 guez 39 call NF95_GET_VAR(ncid, varid, ps)
149 guez 3
150 guez 25 call NF95_CLOSE(ncid)
151 guez 3
152     END SUBROUTINE dynetat0
153    
154     end module dynetat0_m

  ViewVC Help
Powered by ViewVC 1.1.21