/[lmdze]/trunk/libf/dyn3d/dynetat0.f90
ViewVC logotype

Annotation of /trunk/libf/dyn3d/dynetat0.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (hide annotations)
Mon Mar 31 12:24:17 2008 UTC (16 years, 1 month ago) by guez
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 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 guez 7 REAL, intent(out):: ps(:), phis(:, :)
33 guez 3 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 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     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 guez 7 ierr = NF90_GET_VAR(nid, nvarid, phis)
136 guez 3 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