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

Contents of /trunk/Sources/dyn3d/startdyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 225 - (show annotations)
Mon Oct 16 12:35:41 2017 UTC (6 years, 6 months ago) by guez
File size: 3256 byte(s)
LMDZE is now in Fortran 2003 (use of allocatable arguments).

gradsdef was not used.

Change names: [uv]10m to [uv]10m_srf in clmain, y[uv]1 to
[uv]1lay. Remove useless complication: zx_alf[12]. Do not modify
[uv]1lay after initial definition from [uv].

Add [uv]10m_srf to output.

Change names in physiq: [uv]10m to [uv]10m_srf, z[uv]10m to [uv]10m,
corresponding to NetCDF output names.

Remove unused complication couchelimite and useless variable inirnpb
in phytrac.

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

  ViewVC Help
Powered by ViewVC 1.1.21