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

Annotation of /trunk/dyn3d/startdyn.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21