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

Annotation of /trunk/dyn3d/startdyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 68 - (hide 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 guez 3 MODULE startdyn
2    
3     ! From startvar.F, version 1.4
4     ! 2006/01/27 15:14:22 Fairhead
5    
6 guez 54 INTEGER iml_dyn, jml_dyn, llm_dyn
7 guez 3
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 guez 68 USE flininfo_m, only: flininfo
18     USE flinopen_nozoom_m, only: flinopen_nozoom
19 guez 3 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 guez 39 use nr_util, only: assert, pi
27 guez 48 use netcdf, only: nf90_nowrite
28     use netcdf95, only: nf95_open, nf95_close, nf95_get_var, nf95_inq_varid
29 guez 3
30 guez 43 REAL, intent(in):: tsol_2d(:, :) ! (iim + 1, jjm + 1)
31     REAL, intent(out):: psol(:, :) ! (iim + 1, jjm + 1) surface pressure, in Pa
32 guez 3
33     ! Local:
34    
35     REAL date, dt
36 guez 54 INTEGER itau(1), ncid, varid, fid_dyn, ttm_dyn
37 guez 3 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 guez 36 REAL, ALLOCATABLE:: var_ana(:, :)
43     real z(iim + 1, jjm + 1)
44 guez 3 real tmp_var(iim, jjm + 1)
45    
46     !--------------------------
47    
48     print *, "Call sequence information: start_init_dyn"
49 guez 36 call assert((/size(tsol_2d, 1), size(psol, 1)/) == iim + 1, &
50 guez 42 "start_init_dyn size 1")
51 guez 36 call assert((/size(tsol_2d, 2), size(psol, 2)/) == jjm + 1, &
52 guez 42 "start_init_dyn size 2")
53 guez 54
54 guez 36 CALL flininfo('ECDYN.nc', iml_dyn, jml_dyn, llm_dyn, ttm_dyn, fid_dyn)
55 guez 3 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 guez 54 allocate(lon_dyn(iml_dyn, jml_dyn), levdyn_ini(llm_dyn))
60 guez 3
61 guez 54 CALL flinopen_nozoom(iml_dyn, jml_dyn, llm_dyn, lon_dyn, lat_dyn, &
62     levdyn_ini, ttm_dyn, itau, date, dt, fid_dyn)
63 guez 3
64 guez 54 ALLOCATE(var_ana(iml_dyn, jml_dyn), lon_rad(iml_dyn), lon_ini(iml_dyn))
65 guez 3
66 guez 36 IF (MAXVAL(lon_dyn) > pi) THEN
67 guez 3 ! Assume "lon_dyn" is in degrees
68 guez 36 lon_ini = lon_dyn(:, 1) * pi / 180.
69 guez 3 ELSE
70 guez 36 lon_ini = lon_dyn(:, 1)
71 guez 3 ENDIF
72    
73 guez 54 ALLOCATE(lat_rad(jml_dyn), lat_ini(jml_dyn))
74 guez 3
75 guez 36 IF (MAXVAL(lat_dyn) > pi) THEN
76     lat_ini = lat_dyn(1, :) * pi / 180.
77 guez 3 ELSE
78 guez 36 lat_ini = lat_dyn(1, :)
79 guez 3 ENDIF
80    
81 guez 48 call nf95_open('ECDYN.nc', nf90_nowrite, ncid)
82    
83 guez 3 ! 'Z': Surface geopotential
84 guez 48 call nf95_inq_varid(ncid, 'Z', varid)
85     call nf95_get_var(ncid, varid, var_ana)
86 guez 3 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 guez 36 z = gr_int_dyn(tmp_var)
90 guez 3
91     ! 'SP': Surface pressure
92 guez 48 call nf95_inq_varid(ncid, 'SP', varid)
93     call nf95_get_var(ncid, varid, var_ana)
94 guez 3 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 guez 36 psol = gr_int_dyn(tmp_var)
98 guez 3
99 guez 48 call nf95_close(ncid)
100    
101 guez 36 psol(:iim, :) = psol(:iim, :) &
102     * (1. + (z(:iim, :) - phis(:iim, :)) / 287. / tsol_2d(:iim, :))
103 guez 3 psol(iim + 1, :) = psol(1, :)
104    
105 guez 36 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 guez 3
109     END SUBROUTINE start_init_dyn
110    
111     END MODULE startdyn

  ViewVC Help
Powered by ViewVC 1.1.21