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

Annotation of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (hide annotations)
Thu Dec 2 17:11:04 2010 UTC (13 years, 5 months ago) by guez
Original Path: trunk/libf/dyn3d/dynetat0.f90
File size: 6535 byte(s)
Now using the library "NR_util".

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     ! From dynetat0.F, version 1.2 2004/06/22 11:45:30
12     ! Authors: P. Le Van, L. Fairhead
13     ! Objet : lecture de l'état initial
14    
15     use dimens_m, only: iim, jjm, llm, nqmx
16     use comconst, only: im, cpp, dtvr, g, kappa, jm, lllm, omeg, rad
17     use comvert, only: pa
18     use logic, only: fxyhypb, ysinus
19     use comgeom, only: rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d
20     use serre, only: clon, clat, grossismy, grossismx
21 guez 25 use temps, only: day_ref, itau_dyn, annee_ref
22 guez 3 use ener, only: etot0, ang0, ptot0, stot0, ztot0
23 guez 18 use iniadvtrac_m, only: tname
24 guez 9 use netcdf95, only: nf95_open, nf95_inq_varid, handle_err, NF95_CLOSE
25     use netcdf, only: NF90_NOWRITE, NF90_GET_VAR, NF90_NOERR
26 guez 36 use nr_util, only: assert
27 guez 3
28     ! Arguments:
29     REAL, intent(out):: vcov(: , :), ucov(:, :), teta(:, :)
30     REAL, intent(out):: q(:, :, :), masse(:, :)
31 guez 10 REAL, intent(out):: ps(:) ! in Pa
32     REAL, intent(out):: phis(:, :)
33 guez 25 REAL, intent(out):: time_0
34 guez 3
35     ! Variables
36     INTEGER length, iq
37     PARAMETER (length = 100)
38     REAL tab_cntrl(length) ! tableau des parametres du run
39 guez 25 INTEGER ierr, ncid, nvarid
40 guez 3
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 guez 7 size(ps)/) == (iim + 1) * (jjm + 1), "dynetat0 (iim + 1) * (jjm + 1)")
48     call assert(shape(phis) == (/iim + 1, jjm + 1/), "dynetat0 phis")
49 guez 3 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 guez 25 call nf95_open("start.nc", NF90_NOWRITE, ncid)
55 guez 3
56 guez 25 call nf95_inq_varid(ncid, "controle", nvarid)
57     ierr = NF90_GET_VAR(ncid, nvarid, tab_cntrl)
58     call handle_err("dynetat0, controle", ierr, ncid)
59 guez 3
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 guez 25 call NF95_INQ_VARID (ncid, "rlonu", nvarid)
107     ierr = NF90_GET_VAR(ncid, nvarid, rlonu)
108     call handle_err("dynetat0, rlonu", ierr, ncid)
109 guez 3
110 guez 25 call NF95_INQ_VARID (ncid, "rlatu", nvarid)
111     ierr = NF90_GET_VAR(ncid, nvarid, rlatu)
112     call handle_err("dynetat0, rlatu", ierr, ncid)
113 guez 3
114 guez 25 call NF95_INQ_VARID (ncid, "rlonv", nvarid)
115     ierr = NF90_GET_VAR(ncid, nvarid, rlonv)
116     call handle_err("dynetat0, rlonv", ierr, ncid)
117 guez 3
118 guez 25 call NF95_INQ_VARID (ncid, "rlatv", nvarid)
119     ierr = NF90_GET_VAR(ncid, nvarid, rlatv)
120     call handle_err("dynetat0, rlatv", ierr, ncid)
121 guez 3
122 guez 25 call NF95_INQ_VARID (ncid, "cu", nvarid)
123     ierr = NF90_GET_VAR(ncid, nvarid, cu_2d)
124     call handle_err("dynetat0, cu", ierr, ncid)
125 guez 3
126 guez 25 call NF95_INQ_VARID (ncid, "cv", nvarid)
127     ierr = NF90_GET_VAR(ncid, nvarid, cv_2d)
128     call handle_err("dynetat0, cv", ierr, ncid)
129 guez 3
130 guez 25 call NF95_INQ_VARID (ncid, "aire", nvarid)
131     ierr = NF90_GET_VAR(ncid, nvarid, aire_2d)
132     call handle_err("dynetat0, aire", ierr, ncid)
133 guez 3
134 guez 25 call NF95_INQ_VARID (ncid, "phisinit", nvarid)
135     ierr = NF90_GET_VAR(ncid, nvarid, phis)
136     call handle_err("dynetat0, phisinit", ierr, ncid)
137 guez 3
138 guez 25 call NF95_INQ_VARID (ncid, "temps", nvarid)
139     ierr = NF90_GET_VAR(ncid, nvarid, time_0)
140     call handle_err("dynetat0, temps", ierr, ncid)
141 guez 3
142 guez 25 call NF95_INQ_VARID (ncid, "ucov", nvarid)
143     ierr = NF90_GET_VAR(ncid, nvarid, ucov, count=(/iim + 1, jjm + 1, llm/))
144     call handle_err("dynetat0, ucov", ierr, ncid)
145 guez 3
146 guez 25 call NF95_INQ_VARID (ncid, "vcov", nvarid)
147     ierr = NF90_GET_VAR(ncid, nvarid, vcov, count=(/iim + 1, jjm, llm/))
148     call handle_err("dynetat0, vcov", ierr, ncid)
149 guez 3
150 guez 25 call NF95_INQ_VARID (ncid, "teta", nvarid)
151     ierr = NF90_GET_VAR(ncid, nvarid, teta, count=(/iim + 1, jjm + 1, llm/))
152     call handle_err("dynetat0, teta", ierr, ncid)
153 guez 3
154     DO iq = 1, nqmx
155 guez 25 call NF95_INQ_VARID(ncid, tname(iq), nvarid, ierr)
156 guez 3 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 guez 25 ierr = NF90_GET_VAR(ncid, nvarid, q(:, :, iq), &
162 guez 3 count=(/iim + 1, jjm + 1, llm/))
163 guez 25 call handle_err("dynetat0, " // tname(iq), ierr, ncid)
164 guez 3 ENDIF
165     ENDDO
166    
167 guez 25 call NF95_INQ_VARID (ncid, "masse", nvarid)
168     ierr = NF90_GET_VAR(ncid, nvarid, masse, count=(/iim + 1, jjm + 1, llm/))
169     call handle_err("dynetat0, masse", ierr, ncid)
170 guez 3
171 guez 25 call NF95_INQ_VARID (ncid, "ps", nvarid)
172     ierr = NF90_GET_VAR(ncid, nvarid, ps, count=(/iim + 1, jjm + 1/))
173     call handle_err("dynetat0, ps", ierr, ncid)
174 guez 3
175 guez 25 call NF95_CLOSE(ncid)
176 guez 3
177 guez 25 day_ini=day_ini+INT(time_0)
178     time_0=time_0-INT(time_0)
179     ! {0 <= time0 < 1}
180 guez 3
181     1 FORMAT(//10x, 'la valeur de im =', i4, 2x, &
182     'lue sur le fichier de demarrage est differente de la valeur ' &
183     // 'parametree iim =', i4//)
184     2 FORMAT(//10x, 'la valeur de jm =', i4, 2x, &
185     'lue sur le fichier de demarrage est differente de la valeur ' &
186     // 'parametree jjm =', i4//)
187     3 FORMAT(//10x, 'la valeur de lmax =', i4, 2x, &
188     'lue sur le fichier demarrage est differente de la valeur ' &
189     // 'parametree llm =', i4//)
190    
191     END SUBROUTINE dynetat0
192    
193     end module dynetat0_m

  ViewVC Help
Powered by ViewVC 1.1.21