/[lmdze]/trunk/libf/dyn3d/start_init_phys_m.f90
ViewVC logotype

Contents of /trunk/libf/dyn3d/start_init_phys_m.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 30 - (show annotations)
Thu Apr 1 09:07:28 2010 UTC (14 years, 1 month ago) by guez
File size: 3179 byte(s)
Imported Source files of the external library "IOIPSL_Lionel" into
"libf/IOIPSL".

Split "cray.f90" into "scopy.f90" and "ssum.f90".

Rewrote "leapfrog" in order to have a clearer algorithmic structure.

1 MODULE start_init_phys_m
2
3 ! From startvar.F, version 1.4
4 ! 2006/01/27 15:14:22 Fairhead
5
6 IMPLICIT NONE
7
8 REAL, ALLOCATABLE, SAVE, DIMENSION(:, :):: qsol_2d
9
10 CONTAINS
11
12 SUBROUTINE start_init_phys(tsol_2d)
13
14 USE flincom, only: flininfo, flinopen_nozoom, flinget, flinclo
15 use conf_dat2d_m, only: conf_dat2d
16 use inter_barxy_m, only: inter_barxy
17 use gr_int_dyn_m, only: gr_int_dyn
18 use comgeom, only: rlonu, rlatv
19 use dimens_m, only: iim, jjm
20
21 REAL, intent(out):: tsol_2d(:, :)
22
23 ! LOCAL
24
25 INTEGER fid_phys, iml_phys, jml_phys
26 REAL, ALLOCATABLE, DIMENSION(:, :):: lon_phys, lat_phys
27 REAL:: date, dt
28 REAL, DIMENSION(:), ALLOCATABLE:: levphys_ini
29 !ac
30 INTEGER:: itau(1)
31 INTEGER:: llm_tmp, ttm_tmp
32
33 CHARACTER(len=120) physfname
34 LOGICAL:: check=.TRUE.
35
36 REAL, ALLOCATABLE:: lon_rad(:), lat_rad(:)
37 REAL, ALLOCATABLE:: lon_ini(:), lat_ini(:)
38 REAL, ALLOCATABLE:: var_ana(:, :)
39 real tmp_var(iim, jjm + 1)
40
41 !-----------------------------------
42
43 print *, "Call sequence information: start_init_phys"
44 if (any(shape(tsol_2d) /= (/iim + 1, jjm + 1/))) stop "start_init_phys"
45 physfname = 'ECPHY.nc'
46 IF ( check ) print *, 'Opening the surface analysis'
47 CALL flininfo(physfname, iml_phys, jml_phys, llm_tmp, ttm_tmp, fid_phys)
48
49 ALLOCATE(lat_phys(iml_phys, jml_phys))
50 ALLOCATE(lon_phys(iml_phys, jml_phys))
51 ALLOCATE(levphys_ini(llm_tmp))
52
53 CALL flinopen_nozoom(physfname, iml_phys, jml_phys, &
54 llm_tmp, lon_phys, lat_phys, levphys_ini, ttm_tmp, &
55 itau, date, dt, fid_phys)
56
57 DEALLOCATE(levphys_ini)
58
59 ! Allocate the space we will need to get the data out of this file
60 ALLOCATE(var_ana(iml_phys, jml_phys))
61
62 ! In case we have a file which is in degrees we do the transformation
63 ALLOCATE(lon_rad(iml_phys))
64 ALLOCATE(lon_ini(iml_phys))
65
66 IF ( MAXVAL(lon_phys(:, :)) > 2.0 * ASIN(1.0) ) THEN
67 lon_ini(:) = lon_phys(:, 1) * 2.0 * ASIN(1.0) / 180.0
68 ELSE
69 lon_ini(:) = lon_phys(:, 1)
70 ENDIF
71
72 ALLOCATE(lat_rad(jml_phys))
73 ALLOCATE(lat_ini(jml_phys))
74
75 IF ( MAXVAL(lat_phys(:, :)) > 2.0 * ASIN(1.0) ) THEN
76 lat_ini(:) = lat_phys(1, :) * 2.0 * ASIN(1.0) / 180.0
77 ELSE
78 lat_ini(:) = lat_phys(1, :)
79 ENDIF
80
81 ! We get the two standard varibales
82 ! Surface temperature
83 ! 'ST' : Surface temperature
84 CALL flinget(fid_phys, 'ST', iml_phys, jml_phys, &
85 llm_tmp, ttm_tmp, 1, 1, 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_phys -1), var_ana, rlonu(:iim), &
88 rlatv, tmp_var)
89
90 tsol_2d(:, :) = gr_int_dyn(tmp_var)
91
92 ALLOCATE(qsol_2d(iim + 1, jjm + 1))
93 ! Soil moisture
94 CALL flinget(fid_phys, 'CDSW', iml_phys, jml_phys, &
95 llm_tmp, ttm_tmp, 1, 1, var_ana)
96 CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana)
97 CALL inter_barxy(lon_rad, lat_rad(:jml_phys -1), var_ana, rlonu(:iim), &
98 rlatv, tmp_var)
99 qsol_2d(:, :) = gr_int_dyn(tmp_var)
100
101 CALL flinclo(fid_phys)
102
103 END SUBROUTINE start_init_phys
104
105 END MODULE start_init_phys_m

  ViewVC Help
Powered by ViewVC 1.1.21