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

Annotation of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21