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

Annotation of /trunk/dyn3d/startdyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (hide annotations)
Wed Feb 5 17:51:07 2014 UTC (10 years, 3 months ago) by guez
Original Path: trunk/dyn3d/startdyn.f90
File size: 3223 byte(s)
Moved procedure inigeom into module comgeom.

In disvert, renamed s_sampling to vert_sampling, following
LMDZ. Removed choice strato1. In case read, read ap and bp instead of
s (following LMDZ).

Added argument phis to start_init_orog and start_init_dyn, and removed
variable phis of module start_init_orog_m. In etat0 and
start_init_orog, renamed relief to zmea_2d. In start_init_dyn, renamed
psol to ps.

In start_init_orog, renamed relief_hi to relief. No need to set
phis(iim + 1, :) = phis(1, :), already done in grid_noro.

Documentation for massbar out of SVN, in massbar.txt. Documentation
was duplicated in massdair, but not relevant in massdair.

In conflx, no need to initialize pen_[ud] and pde_[ud]. In flxasc,
used intermediary variable fact (following LMDZ).

In grid_noro, added local variable zmea0 for zmea not smoothed and
computed zphi from zmea instead of zmea0 (following LMDZ). This
changes the results of ce0l.

Removed arguments pen_u and pde_d of phytrac and nflxtr, which were
not used.

1 guez 3 MODULE startdyn
2    
3     ! From startvar.F, version 1.4
4 guez 73 ! January 27th, 2006 15:14:22
5 guez 3
6 guez 54 INTEGER iml_dyn, jml_dyn, llm_dyn
7 guez 3
8 guez 73 REAL, pointer:: lon_ini(:), lat_ini(:)
9     ! longitude and latitude from the input file, converted to rad
10 guez 3
11 guez 73 real, pointer:: levdyn_ini(:)
12 guez 3
13     CONTAINS
14    
15 guez 78 SUBROUTINE start_init_dyn(tsol_2d, phis, ps)
16 guez 3
17 guez 73 use comgeom, only: rlonu, rlatv, aire_2d, apoln, apols
18 guez 3 use conf_dat2d_m, only: conf_dat2d
19     use dimens_m, only: iim, jjm
20     use gr_int_dyn_m, only: gr_int_dyn
21 guez 73 use inter_barxy_m, only: inter_barxy
22     use netcdf, only: nf90_nowrite
23     use netcdf95, only: nf95_open, nf95_close, nf95_get_var, nf95_inq_varid, &
24     nf95_gw_var, find_coord
25     use nr_util, only: assert, pi
26 guez 3
27 guez 43 REAL, intent(in):: tsol_2d(:, :) ! (iim + 1, jjm + 1)
28 guez 3
29 guez 78 REAL, intent(in):: phis(:, :) ! (iim + 1, jjm + 1)
30     ! surface geopotential, in m2 s-2
31    
32     REAL, intent(out):: ps(:, :) ! (iim + 1, jjm + 1) surface pressure, in Pa
33    
34 guez 3 ! Local:
35    
36 guez 73 INTEGER ncid, varid
37 guez 3 REAL, ALLOCATABLE:: lon_rad(:), lat_rad(:)
38 guez 36 REAL, ALLOCATABLE:: var_ana(:, :)
39     real z(iim + 1, jjm + 1)
40 guez 3 real tmp_var(iim, jjm + 1)
41    
42     !--------------------------
43    
44     print *, "Call sequence information: start_init_dyn"
45 guez 78 call assert((/size(tsol_2d, 1), size(phis, 1), size(ps, 1)/) == iim + 1, &
46 guez 42 "start_init_dyn size 1")
47 guez 78 call assert((/size(tsol_2d, 2), size(phis, 2), size(ps, 2)/) == jjm + 1, &
48 guez 42 "start_init_dyn size 2")
49 guez 54
50 guez 73 call nf95_open('ECDYN.nc', nf90_nowrite, ncid)
51 guez 3
52 guez 73 call find_coord(ncid, varid=varid, std_name="longitude")
53     call nf95_gw_var(ncid, varid, lon_ini)
54     lon_ini = lon_ini * pi / 180. ! convert to rad
55     iml_dyn = size(lon_ini)
56     print *, "iml_dyn = ", iml_dyn
57 guez 3
58 guez 73 call find_coord(ncid, varid=varid, std_name="latitude")
59     call nf95_gw_var(ncid, varid, lat_ini)
60     lat_ini = lat_ini * pi / 180. ! convert to rad
61     jml_dyn = size(lat_ini)
62     print *, "jml_dyn = ", jml_dyn
63 guez 3
64 guez 73 call nf95_inq_varid(ncid, "level", varid)
65     call nf95_gw_var(ncid, varid, levdyn_ini)
66     llm_dyn = size(levdyn_ini)
67     print *, "llm_dyn = ", llm_dyn
68 guez 3
69 guez 73 ALLOCATE(var_ana(iml_dyn, jml_dyn), lon_rad(iml_dyn), lat_rad(jml_dyn))
70 guez 3
71     ! 'Z': Surface geopotential
72 guez 48 call nf95_inq_varid(ncid, 'Z', varid)
73     call nf95_get_var(ncid, varid, var_ana)
74 guez 3 CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana)
75     CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), &
76     rlatv, tmp_var)
77 guez 36 z = gr_int_dyn(tmp_var)
78 guez 3
79     ! 'SP': Surface pressure
80 guez 48 call nf95_inq_varid(ncid, 'SP', varid)
81     call nf95_get_var(ncid, varid, var_ana)
82 guez 3 CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana)
83     CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), &
84     rlatv, tmp_var)
85 guez 78 ps = gr_int_dyn(tmp_var)
86 guez 3
87 guez 48 call nf95_close(ncid)
88    
89 guez 78 ! Adapt the surface pressure to "phis", with the hypsometric equation:
90     ps(:iim, :) = ps(:iim, :) &
91 guez 36 * (1. + (z(:iim, :) - phis(:iim, :)) / 287. / tsol_2d(:iim, :))
92 guez 3
93 guez 78 ps(iim + 1, :) = ps(1, :)
94     ps(:, 1) = SUM(aire_2d(:iim, 1) * ps(:iim, 1)) / apoln
95     ps(:, jjm + 1) = SUM(aire_2d(:iim, jjm + 1) * ps(:iim, jjm + 1)) / apols
96 guez 3
97     END SUBROUTINE start_init_dyn
98    
99     END MODULE startdyn

  ViewVC Help
Powered by ViewVC 1.1.21