/[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 202 by guez, Wed Jun 8 12:23:41 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(jour, pctsrf_new_oce, pctsrf_new_sic)
        debut, lmt_sst, pctsrf_new)  
8    
9        ! lecture conditions limites
10      ! Cette routine sert d'interface entre le modèle atmosphérique et      ! Cette routine sert d'interface entre le modèle atmosphérique et
11      ! un fichier de conditions aux limites.      ! un fichier de conditions aux limites.
12    
13      ! Laurent FAIRHEAD, February 2000      ! Laurent FAIRHEAD, February 2000
14    
15      use abort_gcm_m, only: abort_gcm      USE netcdf, ONLY: nf90_nowrite
     USE indicesol, ONLY: is_lic, is_oce, is_sic, is_ter, nbsrf  
     USE netcdf, ONLY: nf90_noerr, nf90_nowrite  
16      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
17    
     integer, intent(IN):: itime ! numero du pas de temps courant  
     real, intent(IN):: dtime ! pas de temps de la physique (en s)  
18      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  
19    
20      integer, intent(in):: knindex(klon)      real, intent(out):: pctsrf_new_oce(:), pctsrf_new_sic(:) ! (klon)
     ! index des points de la surface a traiter  
   
     logical, intent(IN):: debut ! 1er appel a la physique (initialisation)  
   
     real, intent(out), dimension(knon):: lmt_sst  
     ! SST lues dans le fichier de CL  
   
     real, intent(out), dimension(klon, nbsrf):: pctsrf_new  
21      ! sous-maille fractionnelle      ! sous-maille fractionnelle
22    
23      ! Local:      ! Local:
24        integer ncid, varid ! pour NetCDF
25    
26      integer ii      ! --------------------------------------------------
   
     INTEGER, save:: lmt_pas ! frequence de lecture des conditions limites  
     ! (en pas de physique)  
   
     logical, save:: deja_lu ! pour indiquer que le jour a lire a deja  
     ! lu pour une surface precedente  
   
     integer, save:: jour_lu  
   
     ! Champs lus dans le fichier de conditions aux limites :  
     real, allocatable, save, dimension(:):: sst_lu  
     real, allocatable, save, dimension(:, :):: pct_tmp  
27    
28      ! Pour Netcdf :      call NF95_OPEN ('limit.nc', NF90_NOWRITE, ncid)
     integer nid, nvarid  
     integer, dimension(2):: start, epais  
29    
30      ! --------------------------------------------------      ! Fraction "ocean"
31        call NF95_INQ_VARID(ncid, 'FOCE', varid)
32        call NF95_GET_VAR(ncid, varid, pctsrf_new_oce, start = (/1, jour/))
33    
34      if (debut .and. .not. allocated(sst_lu)) then      ! Fraction "glace de mer"
35         lmt_pas = nint(86400./dtime * 1.0) ! pour une lecture une fois par jour      call NF95_INQ_VARID(ncid, 'FSIC', varid)
36         jour_lu = jour - 1      call NF95_GET_VAR(ncid, varid, pctsrf_new_sic, start = (/1, jour/))
        allocate(sst_lu(klon))  
        allocate(pct_tmp(klon, nbsrf))  
     endif  
   
     if ((jour - jour_lu) /= 0) deja_lu = .false.  
   
     ! Tester d'abord si c'est le moment de lire le fichier  
     if (mod(itime - 1, lmt_pas) == 0 .and. .not. deja_lu) then  
        call NF95_OPEN ('limit.nc', NF90_NOWRITE, nid)  
   
        ! La tranche de donnees a lire:  
        start(1) = 1  
        start(2) = jour  
        epais(1) = klon  
        epais(2) = 1  
   
        ! Fraction "ocean"  
        call NF95_INQ_VARID(nid, 'FOCE', nvarid)  
        call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_oce), start, epais)  
   
        ! Fraction "glace de mer"  
        call NF95_INQ_VARID(nid, 'FSIC', nvarid)  
        call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_sic), start, epais)  
   
        ! Fraction "terre"  
        call NF95_INQ_VARID(nid, 'FTER', nvarid)  
        call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_ter), start, epais)  
   
        ! Fraction "glacier terre"  
        call NF95_INQ_VARID(nid, 'FLIC', nvarid)  
        call NF95_GET_VAR(nid, nvarid, pct_tmp(:, is_lic), start, epais)  
   
        call NF95_INQ_VARID(nid, 'SST', nvarid)  
        call NF95_GET_VAR(nid, nvarid, sst_lu, start, epais)  
   
        call NF95_CLOSE(nid)  
        deja_lu = .true.  
        jour_lu = jour  
     endif  
   
     ! Recopie des variables dans les champs de sortie  
   
     do ii = 1, knon  
        lmt_sst(ii) = sst_lu(knindex(ii))  
     enddo  
37    
38      pctsrf_new(:, is_oce) = pct_tmp(:, is_oce)      call NF95_CLOSE(ncid)
     pctsrf_new(:, is_sic) = pct_tmp(:, is_sic)  
39    
40    END SUBROUTINE interfoce_lim    END SUBROUTINE interfoce_lim
41    

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

  ViewVC Help
Powered by ViewVC 1.1.21