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

Contents of /trunk/dyn3d/startdyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 54 - (show annotations)
Tue Dec 6 15:07:04 2011 UTC (12 years, 5 months ago) by guez
Original Path: trunk/libf/dyn3d/startdyn.f90
File size: 3490 byte(s)
Removed Numerical Recipes procedure "ran1". Replaced calls to "ran1"
in "inidissip" by calls to intrinsic procedures.

Split file "interface_surf.f90" into a file with a module containing
only variables, "interface_surf", and single-procedure files. Gathered
files into directory "Interface_surf".

Added argument "cdivu" to "gradiv" and "gradiv2", "cdivh" to
"divgrad2" and "divgrad", and "crot" to "nxgraro2" and
"nxgrarot". "dissip" now uses variables "cdivu", "cdivh" and "crot"
from module "inidissip_m", so it can pass them to "gradiv2",
etc. Thanks to this modification, we avoid a circular dependency
betwwen "inidissip.f90" and "gradiv2.f90", etc. The value -1. used by
"gradiv2", for instance, during computation of eigenvalues is not the
value "cdivu" computed by "inidissip".

Extracted procedure "start_inter_3d" from module "startdyn", to its
own module.

In "inidissip", unrolled loop on "ii". I find it clearer now.

Moved variables "matriceun", "matriceus", "matricevn", "matricevs",
"matrinvn" and "matrinvs" from module "parafilt" to module
"inifilr_m". Moved variables "jfiltnu", "jfiltnv", "jfiltsu",
"jfiltsv" from module "coefils" to module "inifilr_m".

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

  ViewVC Help
Powered by ViewVC 1.1.21