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

Diff of /trunk/Sources/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 178 by guez, Fri Mar 11 18:47:26 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 dimphy, ONLY: klon
17      USE indicesol, ONLY: is_lic, is_oce, is_sic, is_ter, nbsrf      USE indicesol, ONLY: is_lic, is_oce, is_sic, is_ter, nbsrf
18      USE netcdf, ONLY: nf90_noerr, nf90_nowrite      USE netcdf, ONLY: nf90_nowrite
19      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
20        use nr_util, only: assert
21    
22      integer, intent(IN):: itime ! numero du pas de temps courant      integer, intent(IN):: itime ! numero du pas de temps courant
23      real, intent(IN):: dtime ! pas de temps de la physique (en s)      real, intent(IN):: dtime ! pas de temps de la physique (en s)
24      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  
25    
26      integer, intent(in):: knindex(klon)      integer, intent(in):: knindex(:) ! (knon)
27      ! index des points de la surface a traiter      ! index des points de la surface a traiter
28    
29      logical, intent(IN):: debut ! 1er appel a la physique (initialisation)      logical, intent(IN):: debut ! 1er appel a la physique (initialisation)
30    
31      real, intent(out), dimension(knon):: lmt_sst      real, intent(out):: lmt_sst(:) ! (knon)
32      ! SST lues dans le fichier de CL      ! SST lues dans le fichier de conditions aux limites
33    
34      real, intent(out), dimension(klon, nbsrf):: pctsrf_new      real, intent(out):: pctsrf_new(:, :) ! (klon, nbsrf)
35      ! sous-maille fractionnelle      ! sous-maille fractionnelle
36    
37      ! Local:      ! Local:
38    
     integer ii  
   
39      INTEGER, save:: lmt_pas ! frequence de lecture des conditions limites      INTEGER, save:: lmt_pas ! frequence de lecture des conditions limites
40      ! (en pas de physique)      ! (en pas de physique)
41    
42      logical, save:: deja_lu ! pour indiquer que le jour a lire a deja      logical, save:: deja_lu
43      ! lu pour une surface precedente      ! pour indiquer que le jour à lire a déjà été lu pour une surface
44        ! précédente
45    
46      integer, save:: jour_lu      integer, save:: jour_lu
47    
48      ! Champs lus dans le fichier de conditions aux limites :      ! Champs lus dans le fichier de conditions aux limites :
49      real, allocatable, save, dimension(:):: sst_lu      real, allocatable, save:: sst_lu(:)
50      real, allocatable, save, dimension(:, :):: pct_tmp      real, allocatable, save:: pct_tmp(:, :)
51    
52      ! Pour Netcdf :      integer ncid, varid ! pour NetCDF
     integer nid, nvarid  
     integer, dimension(2):: start, epais  
53    
54      ! --------------------------------------------------      ! --------------------------------------------------
55    
56        call assert(size(knindex) == size(lmt_sst), "interfoce_lim knon")
57    
58      if (debut .and. .not. allocated(sst_lu)) then      if (debut .and. .not. allocated(sst_lu)) then
59         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
60         jour_lu = jour - 1         jour_lu = jour - 1
61         allocate(sst_lu(klon))         allocate(sst_lu(klon))
62         allocate(pct_tmp(klon, nbsrf))         allocate(pct_tmp(klon, nbsrf))
# Line 67  contains Line 66  contains
66    
67      ! Tester d'abord si c'est le moment de lire le fichier      ! Tester d'abord si c'est le moment de lire le fichier
68      if (mod(itime - 1, lmt_pas) == 0 .and. .not. deja_lu) then      if (mod(itime - 1, lmt_pas) == 0 .and. .not. deja_lu) then
69         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  
70    
71         ! Fraction "ocean"         ! Fraction "ocean"
72         call NF95_INQ_VARID(nid, 'FOCE', nvarid)         call NF95_INQ_VARID(ncid, 'FOCE', varid)
73         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/))
74    
75         ! Fraction "glace de mer"         ! Fraction "glace de mer"
76         call NF95_INQ_VARID(nid, 'FSIC', nvarid)         call NF95_INQ_VARID(ncid, 'FSIC', varid)
77         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/))
78    
79         ! Fraction "terre"         ! Fraction "terre"
80         call NF95_INQ_VARID(nid, 'FTER', nvarid)         call NF95_INQ_VARID(ncid, 'FTER', varid)
81         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/))
82    
83         ! Fraction "glacier terre"         ! Fraction "glacier terre"
84         call NF95_INQ_VARID(nid, 'FLIC', nvarid)         call NF95_INQ_VARID(ncid, 'FLIC', varid)
85         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/))
86    
87         call NF95_INQ_VARID(nid, 'SST', nvarid)         call NF95_INQ_VARID(ncid, 'SST', varid)
88         call NF95_GET_VAR(nid, nvarid, sst_lu, start, epais)         call NF95_GET_VAR(ncid, varid, sst_lu, start = (/1, jour/))
89    
90         call NF95_CLOSE(nid)         call NF95_CLOSE(ncid)
91         deja_lu = .true.         deja_lu = .true.
92         jour_lu = jour         jour_lu = jour
93      endif      endif
94    
95      ! Recopie des variables dans les champs de sortie      ! Recopie des variables dans les champs de sortie
96        lmt_sst = sst_lu(knindex)
     do ii = 1, knon  
        lmt_sst(ii) = sst_lu(knindex(ii))  
     enddo  
   
97      pctsrf_new(:, is_oce) = pct_tmp(:, is_oce)      pctsrf_new(:, is_oce) = pct_tmp(:, is_oce)
98      pctsrf_new(:, is_sic) = pct_tmp(:, is_sic)      pctsrf_new(:, is_sic) = pct_tmp(:, is_sic)
99    

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

  ViewVC Help
Powered by ViewVC 1.1.21