/[lmdze]/trunk/Sources/dyn3d/grilles_gcm_netcdf_sub.f
ViewVC logotype

Diff of /trunk/Sources/dyn3d/grilles_gcm_netcdf_sub.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/dyn3d/grilles_gcm_netcdf_sub.f revision 107 by guez, Thu Sep 11 15:09:15 2014 UTC trunk/Sources/dyn3d/grilles_gcm_netcdf_sub.f revision 139 by guez, Tue May 26 17:46:03 2015 UTC
# Line 6  contains Line 6  contains
6    
7    SUBROUTINE grilles_gcm_netcdf_sub(phis)    SUBROUTINE grilles_gcm_netcdf_sub(phis)
8    
9      ! This subroutine creates the file grilles_gcm.nc containg      ! This subroutine creates the file "grilles_gcm.nc" containg
10      ! longitudes and latitudes in degrees for grids u and v.      ! longitudes and latitudes in degrees for grids u and v.
11    
12      USE comconst, ONLY: g      USE comconst, ONLY: g
13      USE comgeom, ONLY: aire_2d, rlatu, rlatv, rlonu, rlonv      USE comgeom, ONLY: aire_2d
14      USE dimens_m, ONLY: iim, jjm, llm      USE dimens_m, ONLY: iim, jjm
15      USE disvert_m, ONLY: presnivs      use dynetat0_m, only: rlatu, rlatv, rlonu, rlonv
16      USE netcdf, ONLY: nf90_clobber, nf90_float, nf90_int      USE netcdf, ONLY: nf90_clobber, nf90_float, nf90_int
17      USE netcdf95, ONLY: nf95_close, nf95_create, nf95_def_dim, nf95_def_var, &      USE netcdf95, ONLY: nf95_close, nf95_create, nf95_def_dim, nf95_def_var, &
18           nf95_enddef, nf95_put_att, nf95_put_var, nf95_redef           nf95_enddef, nf95_put_att, nf95_put_var, nf95_redef
19      USE nr_util, ONLY: pi      USE nr_util, ONLY: pi
20      USE start_init_orog_m, ONLY: mask      USE start_init_orog_m, ONLY: mask
21    
22      REAL, INTENT(IN):: phis(:, :) ! (iim + 1, jjm + 1) geopotentiel au sol      REAL, INTENT(IN):: phis(:, :) ! (iim + 1, jjm + 1)
23        ! surface geopotential, in m2 s-2
24    
25      ! Local:      ! Local:
26    
27      REAL temp(iim+1, jjm+1)      REAL grille_s(iim+1, jjm+1)
28      INTEGER i, j      INTEGER i, j
29    
30      ! For Netcdf:      ! For Netcdf:
31      INTEGER ncid      INTEGER ncid
32      INTEGER dimid_lonu, dimid_lonv, dimid_latu, dimid_latv, dimid_lev      INTEGER dimid_lonu, dimid_lonv, dimid_latu, dimid_latv
33      INTEGER varid_lonu, varid_lonv, varid_latu, varid_latv      INTEGER varid_lonu, varid_lonv, varid_latu, varid_latv
34      INTEGER varid      INTEGER varid
35      INTEGER varid_phis, varid_area, varid_mask, varid_presnivs      INTEGER varid_orog, varid_area, varid_mask
36    
37      !-----------------------------------------------------------------      !-----------------------------------------------------------------
38    
39      print *, "Call sequence information: grilles_gcm_netcdf_sub"      print *, "Call sequence information: grilles_gcm_netcdf_sub"
40    
41      call NF95_CREATE('grilles_gcm.nc', NF90_CLOBBER, ncid)      call NF95_CREATE('grilles_gcm.nc', NF90_CLOBBER, ncid)
42      call NF95_DEF_DIM(ncid, 'lonu', iim+1, dimid_lonu)  
43      call NF95_DEF_DIM(ncid, 'lonv', iim+1, dimid_lonv)      call NF95_DEF_DIM(ncid, 'lonu', iim + 1, dimid_lonu)
44      call NF95_DEF_DIM(ncid, 'latu', jjm+1, dimid_latu)      call NF95_DEF_DIM(ncid, 'lonv', iim + 1, dimid_lonv)
45        call NF95_DEF_DIM(ncid, 'latu', jjm + 1, dimid_latu)
46      call NF95_DEF_DIM(ncid, 'latv', jjm, dimid_latv)      call NF95_DEF_DIM(ncid, 'latv', jjm, dimid_latv)
47    
     ! Longitudes en u  
48      call NF95_DEF_VAR(ncid, 'lonu', NF90_FLOAT, dimid_lonu, varid_lonu)      call NF95_DEF_VAR(ncid, 'lonu', NF90_FLOAT, dimid_lonu, varid_lonu)
49      call NF95_PUT_ATT(ncid, varid_lonu, 'units', 'degrees_east')      call NF95_PUT_ATT(ncid, varid_lonu, 'units', 'degrees_east')
50      call NF95_PUT_ATT(ncid, varid_lonu, 'long_name', 'Longitude en u')      call NF95_PUT_ATT(ncid, varid_lonu, 'long_name', 'Longitude en u')
51    
     ! Longitudes en v  
52      call NF95_DEF_VAR(ncid, 'lonv', NF90_FLOAT, dimid_lonv, varid_lonv)      call NF95_DEF_VAR(ncid, 'lonv', NF90_FLOAT, dimid_lonv, varid_lonv)
53      call NF95_PUT_ATT(ncid, varid_lonv, 'units', 'degrees_east')      call NF95_PUT_ATT(ncid, varid_lonv, 'units', 'degrees_east')
54      call NF95_PUT_ATT(ncid, varid_lonv, 'long_name', 'Longitude en v')      call NF95_PUT_ATT(ncid, varid_lonv, 'long_name', 'Longitude en v')
55    
     ! Latitude en u  
56      call NF95_DEF_VAR(ncid, 'latu', NF90_FLOAT, dimid_latu, varid_latu)      call NF95_DEF_VAR(ncid, 'latu', NF90_FLOAT, dimid_latu, varid_latu)
57      call NF95_PUT_ATT(ncid, varid_latu, 'units', 'degrees_north')      call NF95_PUT_ATT(ncid, varid_latu, 'units', 'degrees_north')
58      call NF95_PUT_ATT(ncid, varid_latu, 'long_name', 'Latitude en u')      call NF95_PUT_ATT(ncid, varid_latu, 'long_name', 'Latitude en u')
59    
     ! Latitude en v  
60      call NF95_DEF_VAR(ncid, 'latv', NF90_FLOAT, dimid_latv, varid_latv)      call NF95_DEF_VAR(ncid, 'latv', NF90_FLOAT, dimid_latv, varid_latv)
61      call NF95_PUT_ATT(ncid, varid_latv, 'units', 'degrees_north')      call NF95_PUT_ATT(ncid, varid_latv, 'units', 'degrees_north')
62      call NF95_PUT_ATT(ncid, varid_latv, 'long_name', 'Latitude en v')      call NF95_PUT_ATT(ncid, varid_latv, 'long_name', 'Latitude en v')
63    
     ! ecriture de la grille u  
64      call NF95_DEF_VAR(ncid, 'grille_u', NF90_FLOAT, (/dimid_lonu, &      call NF95_DEF_VAR(ncid, 'grille_u', NF90_FLOAT, (/dimid_lonu, &
65           dimid_latu/), varid)           dimid_latu/), varid)
     call NF95_PUT_ATT(ncid, varid, 'units', 'Kelvin')  
66      call NF95_PUT_ATT(ncid, varid, 'long_name', 'Grille aux points u')      call NF95_PUT_ATT(ncid, varid, 'long_name', 'Grille aux points u')
67    
     ! ecriture de la grille v  
68      call NF95_DEF_VAR(ncid, 'grille_v', NF90_FLOAT, (/dimid_lonv, &      call NF95_DEF_VAR(ncid, 'grille_v', NF90_FLOAT, (/dimid_lonv, &
69           dimid_latv/), varid)           dimid_latv/), varid)
     call NF95_PUT_ATT(ncid, varid, 'units', 'Kelvin')  
70      call NF95_PUT_ATT(ncid, varid, 'long_name', 'Grille aux points v')      call NF95_PUT_ATT(ncid, varid, 'long_name', 'Grille aux points v')
71    
72      call NF95_DEF_VAR(ncid, 'grille_s', NF90_FLOAT, (/dimid_lonv, &      call NF95_DEF_VAR(ncid, 'grille_s', NF90_FLOAT, (/dimid_lonv, &
73           dimid_latu/), varid)           dimid_latu/), varid)
74      call NF95_PUT_ATT(ncid, varid, 'units', 'Kelvin')      call NF95_PUT_ATT(ncid, varid, 'long_name', 'Grille aux points scalaires')
75      call NF95_PUT_ATT(ncid, varid, 'long_name', &  
76           'Grille aux points scalaires')      call NF95_DEF_VAR(ncid, 'orog', NF90_FLOAT, (/dimid_lonv, dimid_latu/), &
77             varid_orog)
78      call NF95_DEF_DIM(ncid, 'lev', llm, dimid_lev)      call NF95_PUT_ATT(ncid, varid_orog, 'units', 'm')
79      call NF95_DEF_VAR(ncid, 'presnivs', NF90_FLOAT, dimid_lev, varid_presnivs)      call NF95_PUT_ATT(ncid, varid_orog, 'standard_name', 'surface_altitude')
80    
81      ! fields      call NF95_DEF_VAR(ncid, 'aire', NF90_FLOAT, (/dimid_lonv, dimid_latu/), &
82             varid_area)
83      call NF95_DEF_VAR(ncid, 'phis', NF90_FLOAT, (/dimid_lonv, &      call NF95_PUT_ATT(ncid, varid_area, 'units', 'm2')
84           dimid_latu/), varid_phis)  
     call NF95_DEF_VAR(ncid, 'aire', NF90_FLOAT, (/dimid_lonv, &  
          dimid_latu/), varid_area)  
85      call NF95_DEF_VAR(ncid, 'mask', NF90_INT, (/dimid_lonv, dimid_latu/), &      call NF95_DEF_VAR(ncid, 'mask', NF90_INT, (/dimid_lonv, dimid_latu/), &
86           varid_mask)           varid_mask)
87    
88      call NF95_ENDDEF(ncid)      call NF95_ENDDEF(ncid)
89    
90      ! 3-b- Ecriture de la grille pour la sortie      call NF95_PUT_VAR(ncid, varid_lonu, rlonu * 180. / pi)
91        call NF95_PUT_VAR(ncid, varid_lonv, rlonv * 180. / pi)
92        call NF95_PUT_VAR(ncid, varid_latu, rlatu * 180. / pi)
93        call NF95_PUT_VAR(ncid, varid_latv, rlatv * 180. / pi)
94    
95        forall (i = 1:iim + 1, j = 1:jjm + 1) grille_s(i, j) = MOD(i, 2) + MOD(j, 2)
96        call NF95_PUT_VAR(ncid, varid, grille_s)
97    
98      call NF95_PUT_VAR(ncid, varid_lonu, rlonu*180./pi)      call NF95_PUT_VAR(ncid, varid_orog, phis / g)
     call NF95_PUT_VAR(ncid, varid_lonv, rlonv*180./pi)  
     call NF95_PUT_VAR(ncid, varid_latu, rlatu*180./pi)  
     call NF95_PUT_VAR(ncid, varid_latv, rlatv*180./pi)  
   
     DO j=1, jjm+1  
        DO i=1, iim+1  
           temp(i, j)=MOD(i, 2)+MOD(j, 2)  
        ENDDO  
     ENDDO  
   
     call NF95_PUT_VAR(ncid, varid, temp)  
     call NF95_PUT_VAR(ncid, varid_presnivs, presnivs)  
     call NF95_PUT_VAR(ncid, varid_phis, phis/g)  
99      call NF95_PUT_VAR(ncid, varid_area, aire_2d)      call NF95_PUT_VAR(ncid, varid_area, aire_2d)
100      call NF95_PUT_VAR(ncid, varid_mask, nINT(mask))      call NF95_PUT_VAR(ncid, varid_mask, nINT(mask))
101    

Legend:
Removed from v.107  
changed lines
  Added in v.139

  ViewVC Help
Powered by ViewVC 1.1.21