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

Contents of /trunk/dyn3d/startdyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 73 - (show annotations)
Fri Nov 15 17:48:30 2013 UTC (10 years, 6 months ago) by guez
Original Path: trunk/libf/dyn3d/startdyn.f90
File size: 3092 byte(s)
Renamed tpot to teta and psol to ps in etat0.

Replaced calls to flincom by calls to NetCDF95 in startdyn. lon_ini,
lat_ini and levdyn_ini are now pointers.
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, pointer:: lon_ini(:), lat_ini(:)
9 ! longitude and latitude from the input file, converted to rad
10
11 real, pointer:: levdyn_ini(:)
12
13 CONTAINS
14
15 SUBROUTINE start_init_dyn(tsol_2d, psol)
16
17 use comgeom, only: rlonu, rlatv, aire_2d, apoln, apols
18 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 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 use start_init_orog_m, only: phis
27
28 REAL, intent(in):: tsol_2d(:, :) ! (iim + 1, jjm + 1)
29 REAL, intent(out):: psol(:, :) ! (iim + 1, jjm + 1) surface pressure, in Pa
30
31 ! Local:
32
33 INTEGER ncid, varid
34 REAL, ALLOCATABLE:: lon_rad(:), lat_rad(:)
35 REAL, ALLOCATABLE:: var_ana(:, :)
36 real z(iim + 1, jjm + 1)
37 real tmp_var(iim, jjm + 1)
38
39 !--------------------------
40
41 print *, "Call sequence information: start_init_dyn"
42 call assert((/size(tsol_2d, 1), size(psol, 1)/) == iim + 1, &
43 "start_init_dyn size 1")
44 call assert((/size(tsol_2d, 2), size(psol, 2)/) == jjm + 1, &
45 "start_init_dyn size 2")
46
47 call nf95_open('ECDYN.nc', nf90_nowrite, ncid)
48
49 call find_coord(ncid, varid=varid, std_name="longitude")
50 call nf95_gw_var(ncid, varid, lon_ini)
51 lon_ini = lon_ini * pi / 180. ! convert to rad
52 iml_dyn = size(lon_ini)
53 print *, "iml_dyn = ", iml_dyn
54
55 call find_coord(ncid, varid=varid, std_name="latitude")
56 call nf95_gw_var(ncid, varid, lat_ini)
57 lat_ini = lat_ini * pi / 180. ! convert to rad
58 jml_dyn = size(lat_ini)
59 print *, "jml_dyn = ", jml_dyn
60
61 call nf95_inq_varid(ncid, "level", varid)
62 call nf95_gw_var(ncid, varid, levdyn_ini)
63 llm_dyn = size(levdyn_ini)
64 print *, "llm_dyn = ", llm_dyn
65
66 ALLOCATE(var_ana(iml_dyn, jml_dyn), lon_rad(iml_dyn), lat_rad(jml_dyn))
67
68 ! 'Z': Surface geopotential
69 call nf95_inq_varid(ncid, 'Z', varid)
70 call nf95_get_var(ncid, varid, var_ana)
71 CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana)
72 CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), &
73 rlatv, tmp_var)
74 z = gr_int_dyn(tmp_var)
75
76 ! 'SP': Surface pressure
77 call nf95_inq_varid(ncid, 'SP', varid)
78 call nf95_get_var(ncid, varid, var_ana)
79 CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana)
80 CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), &
81 rlatv, tmp_var)
82 psol = gr_int_dyn(tmp_var)
83
84 call nf95_close(ncid)
85
86 psol(:iim, :) = psol(:iim, :) &
87 * (1. + (z(:iim, :) - phis(:iim, :)) / 287. / tsol_2d(:iim, :))
88 psol(iim + 1, :) = psol(1, :)
89
90 psol(:, 1) = SUM(aire_2d(:iim, 1) * psol(:iim, 1)) / apoln
91 psol(:, jjm + 1) = SUM(aire_2d(:iim, jjm + 1) * psol(:iim, jjm + 1)) &
92 / apols
93
94 END SUBROUTINE start_init_dyn
95
96 END MODULE startdyn

  ViewVC Help
Powered by ViewVC 1.1.21