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

Annotation of /trunk/dyn3d/start_inter_3d.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (hide annotations)
Fri Apr 20 14:58:43 2012 UTC (12 years, 1 month ago) by guez
Original Path: trunk/libf/dyn3d/start_inter_3d.f90
File size: 2564 byte(s)
No more included file in LMDZE, not even "netcdf.inc".

Created a variable containing the list of common source files in
GNUmakefile. So we now also see clearly files that are specific to
each program.

Split module "histcom". Assembled resulting files in directory
"Histcom".

Removed aliasing in calls to "laplacien".

1 guez 54 module start_inter_3d_m
2    
3     IMPLICIT NONE
4    
5     contains
6    
7     subroutine start_inter_3d(varname, lon_in2, lat_in2, pls_in, var3d)
8    
9     ! This procedure gets a 3D variable from a file and interpolates it.
10    
11     use nr_util, only: assert_eq
12 guez 61 use numer_rec_95, only: spline, splint
13 guez 54 use inter_barxy_m, only: inter_barxy
14     use gr_int_dyn_m, only: gr_int_dyn
15     use conf_dat3d_m, only: conf_dat3d
16     use netcdf, only: nf90_nowrite
17     use netcdf95, only: nf95_open, nf95_close, nf95_get_var, nf95_inq_varid
18     use startdyn, only: IML_DYN, JML_DYN, LLM_DYN, LAT_INI, LEVDYN_INI, LON_INI
19    
20     CHARACTER(len=*), intent(in):: varname
21     REAL, intent(in):: lon_in2(:) ! (iml)
22     REAL, intent(in):: lat_in2(:)
23     REAL, intent(in):: pls_in(:, :, :) ! (iml, jml, lml)
24     REAL, intent(out):: var3d(:, :, :) ! (iml, jml, lml)
25    
26     ! LOCAL:
27     INTEGER iml, jml, lml, ncid, varid
28     INTEGER ii, ij, il
29     REAL lon_rad(iml_dyn), lat_rad(jml_dyn)
30     REAL lev_dyn(llm_dyn)
31     REAL var_tmp2d(size(lon_in2)-1, size(pls_in, 2))
32     real var_tmp3d(size(lon_in2), size(pls_in, 2), llm_dyn)
33     REAL ax(llm_dyn), ay(llm_dyn), yder(llm_dyn)
34     real var_ana3d(iml_dyn, jml_dyn, llm_dyn)
35    
36     !--------------------------------
37    
38     print *, "Call sequence information: start_inter_3d"
39    
40     iml = assert_eq(size(pls_in, 1), size(lon_in2), size(var3d, 1), &
41     "start_inter_3d iml")
42     jml = assert_eq(size(pls_in, 2), size(var3d, 2), "start_inter_3d jml")
43     lml = assert_eq(size(pls_in, 3), size(var3d, 3), "start_inter_3d lml")
44    
45     print *, "iml = ", iml, ", jml = ", jml
46     print *, "varname = ", varname
47     call nf95_open('ECDYN.nc', nf90_nowrite, ncid)
48     call nf95_inq_varid(ncid, varname, varid)
49     call nf95_get_var(ncid, varid, var_ana3d)
50     call nf95_close(ncid)
51     CALL conf_dat3d(lon_ini, lat_ini, levdyn_ini, lon_rad, lat_rad, lev_dyn, &
52     var_ana3d)
53    
54     DO il = 1, llm_dyn
55     CALL inter_barxy(lon_rad, lat_rad(:jml_dyn-1), var_ana3d(:, :, il), &
56     lon_in2(:iml-1), lat_in2, var_tmp2d)
57     var_tmp3d(:, :, il) = gr_int_dyn(var_tmp2d)
58     ENDDO
59    
60     ! Pour l'interpolation verticale, on interpole du haut de l'atmosphère
61     ! vers le sol :
62     ax = lev_dyn(llm_dyn:1:-1)
63     DO ij=1, jml
64     DO ii=1, iml-1
65     ay = var_tmp3d(ii, ij, llm_dyn:1:-1)
66     yder = SPLINE(ax, ay)
67     do il=1, lml
68     var3d(ii, ij, il) = SPLINT(ax, ay, yder, pls_in(ii, ij, il))
69     END do
70     ENDDO
71     ENDDO
72     var3d(iml, :, :) = var3d(1, :, :)
73    
74     END subroutine start_inter_3d
75    
76     end module start_inter_3d_m

  ViewVC Help
Powered by ViewVC 1.1.21