/[lmdze]/trunk/phylmd/Interface_surf/interfoce_lim.f
ViewVC logotype

Diff of /trunk/phylmd/Interface_surf/interfoce_lim.f

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

trunk/phylmd/Interface_surf/interfoce_lim.f revision 104 by guez, Thu Sep 4 10:05:52 2014 UTC trunk/Sources/phylmd/Interface_surf/interfoce_lim.f revision 175 by guez, Fri Feb 5 16:02:34 2016 UTC
# Line 4  module interfoce_lim_m Line 4  module interfoce_lim_m
4    
5  contains  contains
6    
7    SUBROUTINE interfoce_lim(itime, dtime, jour, klon, knon, knindex, &    SUBROUTINE interfoce_lim(itime, dtime, jour, knindex, debut, lmt_sst, &
8         debut, lmt_sst, pctsrf_new)         pctsrf_new)
9    
10        ! lecture conditions limites
11      ! Cette routine sert d'interface entre le modèle atmosphérique et      ! Cette routine sert d'interface entre le modèle atmosphérique et
12      ! un fichier de conditions aux limites.      ! un fichier de conditions aux limites.
13    
14      ! Laurent FAIRHEAD, February 2000      ! Laurent FAIRHEAD, February 2000
15    
16      use abort_gcm_m, only: abort_gcm      use abort_gcm_m, only: abort_gcm
17        USE dimphy, ONLY: klon
18      USE indicesol, ONLY: is_lic, is_oce, is_sic, is_ter, nbsrf      USE indicesol, ONLY: is_lic, is_oce, is_sic, is_ter, nbsrf
19      USE netcdf, ONLY: nf90_noerr, nf90_nowrite      USE netcdf, ONLY: nf90_noerr, nf90_nowrite
20      use netcdf95, only: NF95_CLOSE, nf95_get_var, NF95_INQ_VARID, nf95_open      use netcdf95, only: NF95_CLOSE, nf95_get_var, NF95_INQ_VARID, nf95_open
21        use nr_util, only: assert_eq
22    
23      integer, intent(IN):: itime ! numero du pas de temps courant      integer, intent(IN):: itime ! numero du pas de temps courant
24      real, intent(IN):: dtime ! pas de temps de la physique (en s)      real, intent(IN):: dtime ! pas de temps de la physique (en s)
25      integer, intent(IN):: jour ! jour a lire dans l'annee      integer, intent(IN):: jour ! jour a lire dans l'annee
     integer, intent(IN):: klon ! taille de la grille  
     integer, intent(IN):: knon ! nombre de points dans le domaine a traiter  
26    
27      integer, intent(in):: knindex(klon)      integer, intent(in):: knindex(:) ! (knon)
28      ! index des points de la surface a traiter      ! index des points de la surface a traiter
29    
30      logical, intent(IN):: debut ! 1er appel a la physique (initialisation)      logical, intent(IN):: debut ! 1er appel a la physique (initialisation)
31    
32      real, intent(out), dimension(knon):: lmt_sst      real, intent(out):: lmt_sst(:) ! (knon)
33      ! SST lues dans le fichier de CL      ! SST lues dans le fichier de conditions aux limites
34    
35      real, intent(out), dimension(klon, nbsrf):: pctsrf_new      real, intent(out):: pctsrf_new(:, :) ! (klon, nbsrf)
36      ! sous-maille fractionnelle      ! sous-maille fractionnelle
37    
38      ! Local:      ! Local:
39    
40      integer ii      integer knon ! nombre de points dans le domaine a traiter
41    
42      INTEGER, save:: lmt_pas ! frequence de lecture des conditions limites      INTEGER, save:: lmt_pas ! frequence de lecture des conditions limites
43      ! (en pas de physique)      ! (en pas de physique)
44    
45      logical, save:: deja_lu ! pour indiquer que le jour a lire a deja      logical, save:: deja_lu
46      ! lu pour une surface precedente      ! pour indiquer que le jour à lire a déjà été lu pour une surface
47        ! précédente
48    
49      integer, save:: jour_lu      integer, save:: jour_lu
50    
51      ! Champs lus dans le fichier de conditions aux limites :      ! Champs lus dans le fichier de conditions aux limites :
52      real, allocatable, save, dimension(:):: sst_lu      real, allocatable, save:: sst_lu(:)
53      real, allocatable, save, dimension(:, :):: pct_tmp      real, allocatable, save:: pct_tmp(:, :)
54    
55      ! Pour Netcdf :      integer ncid, varid ! pour NetCDF
     integer nid, nvarid  
     integer, dimension(2):: start, epais  
56    
57      ! --------------------------------------------------      ! --------------------------------------------------
58    
59        knon = assert_eq(size(knindex), size(lmt_sst), "interfoce_lim knon")
60    
61      if (debut .and. .not. allocated(sst_lu)) then      if (debut .and. .not. allocated(sst_lu)) then
62         lmt_pas = nint(86400./dtime * 1.0) ! pour une lecture une fois par jour         lmt_pas = nint(86400. / dtime) ! pour une lecture une fois par jour
63         jour_lu = jour - 1         jour_lu = jour - 1
64         allocate(sst_lu(klon))         allocate(sst_lu(klon))
65         allocate(pct_tmp(klon, nbsrf))         allocate(pct_tmp(klon, nbsrf))
# Line 67  contains Line 69  contains
69    
70      ! Tester d'abord si c'est le moment de lire le fichier      ! Tester d'abord si c'est le moment de lire le fichier
71      if (mod(itime - 1, lmt_pas) == 0 .and. .not. deja_lu) then      if (mod(itime - 1, lmt_pas) == 0 .and. .not. deja_lu) then
72         call NF95_OPEN ('limit.nc', NF90_NOWRITE, nid)         call NF95_OPEN ('limit.nc', NF90_NOWRITE, ncid)
   
        ! La tranche de donnees a lire:  
        start(1) = 1  
        start(2) = jour  
        epais(1) = klon  
        epais(2) = 1  
73    
74         ! Fraction "ocean"         ! Fraction "ocean"
75         call NF95_INQ_VARID(nid, 'FOCE', nvarid)         call NF95_INQ_VARID(ncid, 'FOCE', varid)
76         call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_oce), start, epais)         call NF95_GET_VAR(ncid, varid, pct_tmp(:, is_oce), start = (/1, jour/))
77    
78         ! Fraction "glace de mer"         ! Fraction "glace de mer"
79         call NF95_INQ_VARID(nid, 'FSIC', nvarid)         call NF95_INQ_VARID(ncid, 'FSIC', varid)
80         call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_sic), start, epais)         call NF95_GET_VAR(ncid, varid, pct_tmp(:, is_sic), start = (/1, jour/))
81    
82         ! Fraction "terre"         ! Fraction "terre"
83         call NF95_INQ_VARID(nid, 'FTER', nvarid)         call NF95_INQ_VARID(ncid, 'FTER', varid)
84         call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_ter), start, epais)         call NF95_GET_VAR(ncid, varid, pct_tmp(:, is_ter), start = (/1, jour/))
85    
86         ! Fraction "glacier terre"         ! Fraction "glacier terre"
87         call NF95_INQ_VARID(nid, 'FLIC', nvarid)         call NF95_INQ_VARID(ncid, 'FLIC', varid)
88         call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_lic), start, epais)         call NF95_GET_VAR(ncid, varid, pct_tmp(:, is_lic), start = (/1, jour/))
89    
90         call NF95_INQ_VARID(nid, 'SST', nvarid)         call NF95_INQ_VARID(ncid, 'SST', varid)
91         call NF95_GET_VAR(nid, nvarid, sst_lu, start, epais)         call NF95_GET_VAR(ncid, varid, sst_lu, start = (/1, jour/))
92    
93         call NF95_CLOSE(nid)         call NF95_CLOSE(ncid)
94         deja_lu = .true.         deja_lu = .true.
95         jour_lu = jour         jour_lu = jour
96      endif      endif
97    
98      ! Recopie des variables dans les champs de sortie      ! Recopie des variables dans les champs de sortie
99        lmt_sst = sst_lu(knindex)
     do ii = 1, knon  
        lmt_sst(ii) = sst_lu(knindex(ii))  
     enddo  
   
100      pctsrf_new(:, is_oce) = pct_tmp(:, is_oce)      pctsrf_new(:, is_oce) = pct_tmp(:, is_oce)
101      pctsrf_new(:, is_sic) = pct_tmp(:, is_sic)      pctsrf_new(:, is_sic) = pct_tmp(:, is_sic)
102    

Legend:
Removed from v.104  
changed lines
  Added in v.175

  ViewVC Help
Powered by ViewVC 1.1.21