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

Contents of /trunk/dyn3d/startdyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 68 - (show annotations)
Wed Nov 14 16:59:30 2012 UTC (11 years, 6 months ago) by guez
Original Path: trunk/libf/dyn3d/startdyn.f90
File size: 3525 byte(s)
Split "flincom.f90" into "flinclo.f90", "flinfindcood.f90",
"flininfo.f90" and "flinopen_nozoom.f90", in directory
"IOIPSL/Flincom".

Renamed "etat0_lim" to "ce0l", as in LMDZ.

Split "readsulfate.f" into "readsulfate.f90", "readsulfate_preind.f90"
and "getso4fromfile.f90".

In etat0, renamed variable q3d to q, as in "dynredem1". Replaced calls
to Flicom procedures by calls to NetCDF95.

In leapfrog, added call to writehist.

Extracted ASCII art from "grid_noro" into a file
"grid_noro.txt". Transformed explicit-shape local arrays into
automatic arrays, so that test on values of iim and jjm is no longer
needed. Test on weight:
          IF (weight(ii, jj) /= 0.) THEN
is useless. There is already a test before:
    if (any(weight == 0.)) stop "zero weight in grid_noro"

In "aeropt", replaced duplicated lines with different values of inu by
a loop on inu.

Removed arguments of "conf_phys". Corresponding variables are now
defined in "physiq", in a namelist. In "conf_phys", read a namelist
instead of using getin.

1 MODULE startdyn
2
3 ! From startvar.F, version 1.4
4 ! 2006/01/27 15:14:22 Fairhead
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, psol)
16
17 USE flininfo_m, only: flininfo
18 USE flinopen_nozoom_m, only: flinopen_nozoom
19 use comgeom, only: aire_2d, apoln, apols
20 use conf_dat2d_m, only: conf_dat2d
21 use inter_barxy_m, only: inter_barxy
22 use comgeom, only: rlonu, rlatv
23 use dimens_m, only: iim, jjm
24 use gr_int_dyn_m, only: gr_int_dyn
25 use start_init_orog_m, only: phis
26 use nr_util, only: assert, pi
27 use netcdf, only: nf90_nowrite
28 use netcdf95, only: nf95_open, nf95_close, nf95_get_var, nf95_inq_varid
29
30 REAL, intent(in):: tsol_2d(:, :) ! (iim + 1, jjm + 1)
31 REAL, intent(out):: psol(:, :) ! (iim + 1, jjm + 1) surface pressure, in Pa
32
33 ! Local:
34
35 REAL date, dt
36 INTEGER itau(1), ncid, varid, fid_dyn, ttm_dyn
37 REAL, ALLOCATABLE:: lon_rad(:), lat_rad(:)
38
39 REAL, ALLOCATABLE:: lon_dyn(:, :), lat_dyn(:, :)
40 ! (longitude and latitude from the input file, in rad or degrees)
41
42 REAL, ALLOCATABLE:: var_ana(:, :)
43 real z(iim + 1, jjm + 1)
44 real tmp_var(iim, jjm + 1)
45
46 !--------------------------
47
48 print *, "Call sequence information: start_init_dyn"
49 call assert((/size(tsol_2d, 1), size(psol, 1)/) == iim + 1, &
50 "start_init_dyn size 1")
51 call assert((/size(tsol_2d, 2), size(psol, 2)/) == jjm + 1, &
52 "start_init_dyn size 2")
53
54 CALL flininfo('ECDYN.nc', iml_dyn, jml_dyn, llm_dyn, ttm_dyn, fid_dyn)
55 print *, "iml_dyn = ", iml_dyn, ", jml_dyn = ", jml_dyn, &
56 ", llm_dyn = ", llm_dyn, ", ttm_dyn = ", ttm_dyn
57
58 ALLOCATE(lat_dyn(iml_dyn, jml_dyn))
59 allocate(lon_dyn(iml_dyn, jml_dyn), levdyn_ini(llm_dyn))
60
61 CALL flinopen_nozoom(iml_dyn, jml_dyn, llm_dyn, lon_dyn, lat_dyn, &
62 levdyn_ini, ttm_dyn, itau, date, dt, fid_dyn)
63
64 ALLOCATE(var_ana(iml_dyn, jml_dyn), lon_rad(iml_dyn), lon_ini(iml_dyn))
65
66 IF (MAXVAL(lon_dyn) > pi) THEN
67 ! Assume "lon_dyn" is in degrees
68 lon_ini = lon_dyn(:, 1) * pi / 180.
69 ELSE
70 lon_ini = lon_dyn(:, 1)
71 ENDIF
72
73 ALLOCATE(lat_rad(jml_dyn), lat_ini(jml_dyn))
74
75 IF (MAXVAL(lat_dyn) > pi) THEN
76 lat_ini = lat_dyn(1, :) * pi / 180.
77 ELSE
78 lat_ini = lat_dyn(1, :)
79 ENDIF
80
81 call nf95_open('ECDYN.nc', nf90_nowrite, ncid)
82
83 ! 'Z': Surface geopotential
84 call nf95_inq_varid(ncid, 'Z', varid)
85 call nf95_get_var(ncid, varid, var_ana)
86 CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana)
87 CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), &
88 rlatv, tmp_var)
89 z = gr_int_dyn(tmp_var)
90
91 ! 'SP': Surface pressure
92 call nf95_inq_varid(ncid, 'SP', varid)
93 call nf95_get_var(ncid, varid, var_ana)
94 CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana)
95 CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), &
96 rlatv, tmp_var)
97 psol = gr_int_dyn(tmp_var)
98
99 call nf95_close(ncid)
100
101 psol(:iim, :) = psol(:iim, :) &
102 * (1. + (z(:iim, :) - phis(:iim, :)) / 287. / tsol_2d(:iim, :))
103 psol(iim + 1, :) = psol(1, :)
104
105 psol(:, 1) = SUM(aire_2d(:iim, 1) * psol(:iim, 1)) / apoln
106 psol(:, jjm + 1) = SUM(aire_2d(:iim, jjm + 1) * psol(:iim, jjm + 1)) &
107 / apols
108
109 END SUBROUTINE start_init_dyn
110
111 END MODULE startdyn

  ViewVC Help
Powered by ViewVC 1.1.21