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

Contents of /trunk/dyn3d/dynetat0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (show annotations)
Mon Mar 31 12:24:17 2008 UTC (16 years, 2 months ago) by guez
Original Path: trunk/libf/dyn3d/dynetat0.f90
File size: 6466 byte(s)
This revision is not in working order. Pending some moving of files.

Important changes. In the program "etat0_lim": ozone coefficients from
Mobidic are regridded in time instead of pressure ; consequences in
"etat0". In the program "gcm", ozone coefficients from Mobidic are
read once per day only for the current day and regridded in pressure ;
consequences in "o3_chem_m", "regr_pr_coefoz", "phytrac" and
"regr_pr_comb_coefoz_m".

NetCDF95 is a library and does not export NetCDF.

New variables "nag_gl_options", "nag_fcalls_options" and
"nag_cross_options" in "nag_tools.mk".

"check_coefoz.jnl" rewritten entirely for new version of
"coefoz_LMDZ.nc".

Target "obj_etat0_lim" moved from "GNUmakefile" to "nag_rules.mk".

Added some "intent" attributes in "calfis", "clmain", "clqh",
"cltrac", "cltracrn", "cvltr", "ini_undefSTD", "moy_undefSTD",
"nflxtr", "phystokenc", "phytrac", "readsulfate", "readsulfate_preind"
and "undefSTD".

In "dynetat0", "dynredem0" and "gcm", "phis" has rank 2 instead of
1. "phis" has assumed shape in "dynredem0".

Added module containing "dynredem0". Changed some calls with NetCDF
Fortran 77 interface to calls with NetCDF95 interface.

Replaced calls to "ssum" by calls to "sum" in "inigeom".

In "make.sh", new option "-c" to change compiler.

In "aaam_bud", argument "rjour" deleted.

In "physiq": renamed some variables; deleted variable "xjour".

In "phytrac": renamed some variables; new argument "lmt_pas".

1 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)/) == (iim + 1) * (jjm + 1), "dynetat0 (iim + 1) * (jjm + 1)")
48 call assert(shape(phis) == (/iim + 1, jjm + 1/), "dynetat0 phis")
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)
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