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

Annotation of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 25 - (hide annotations)
Fri Mar 5 16:43:45 2010 UTC (14 years, 2 months ago) by guez
Original Path: trunk/libf/dyn3d/dynetat0.f90
File size: 6537 byte(s)
Simplified "etat0_lim.sh" and "gcm.sh" because the full versions
depended on personal arrangements for directories and machines.

Translated included files into modules. Encapsulated procedures into modules.

Moved variables from module "comgeom" to local variables of
"inigeom". Deleted some unused variables in "comgeom".

Moved variable "day_ini" from module "temps" to module "dynetat0_m".

Removed useless test on variable "time" and useless "close" statement
in procedure "leapfrog".

Removed useless call to "inigeom" in procedure "limit".

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 13 use numer_rec, 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