/[lmdze]/trunk/libf/phylmd/Interface_surf/interfsur_lim.f90
ViewVC logotype

Annotation of /trunk/libf/phylmd/Interface_surf/interfsur_lim.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (hide annotations)
Fri Apr 20 14:58:43 2012 UTC (12 years ago) by guez
File size: 4448 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 interfsur_lim_m
2    
3     implicit none
4    
5     contains
6    
7     SUBROUTINE interfsur_lim(itime, dtime, jour, &
8     klon, nisurf, knon, knindex, &
9     debut, &
10     lmt_alb, lmt_rug)
11    
12     ! Cette routine sert d'interface entre le modèle atmosphérique et
13     ! un fichier de conditions aux limites.
14    
15     ! L. Fairhead 02/2000
16    
17     use abort_gcm_m, only: abort_gcm
18 guez 61 use netcdf
19 guez 54
20     ! Parametres d'entree
21     ! input:
22     ! itime numero du pas de temps courant
23     ! dtime pas de temps de la physique (en s)
24     ! jour jour a lire dans l'annee
25     ! nisurf index de la surface a traiter (1 = sol continental)
26     ! knon nombre de points dans le domaine a traiter
27     ! knindex index des points de la surface a traiter
28     ! klon taille de la grille
29     ! debut logical: 1er appel a la physique (initialisation)
30     integer, intent(IN) :: itime
31     real , intent(IN) :: dtime
32     integer, intent(IN) :: jour
33     integer, intent(IN) :: nisurf
34     integer, intent(IN) :: knon
35     integer, intent(IN) :: klon
36     integer, dimension(klon), intent(in) :: knindex
37     logical, intent(IN) :: debut
38    
39     ! Parametres de sortie
40     ! output:
41     ! lmt_sst SST lues dans le fichier de CL
42     ! lmt_alb Albedo lu
43     ! lmt_rug longueur de rugosité lue
44     ! pctsrf_new sous-maille fractionnelle
45     real, intent(out), dimension(klon) :: lmt_alb
46     real, intent(out), dimension(klon) :: lmt_rug
47    
48     ! Variables locales
49     integer :: ii
50     integer, save :: lmt_pas ! frequence de lecture des conditions limites
51     ! (en pas de physique)
52     logical, save :: deja_lu_sur! pour indiquer que le jour a lire a deja
53     ! lu pour une surface precedente
54     integer, save :: jour_lu_sur
55     integer :: ierr
56     character (len = 20) :: modname = 'interfsur_lim'
57     character (len = 80) :: abort_message
58     logical, save :: newlmt = .false.
59     logical, save :: check = .false.
60     ! Champs lus dans le fichier de CL
61     real, allocatable , save, dimension(:) :: alb_lu, rug_lu
62    
63     ! quelques variables pour netcdf
64    
65     integer , save :: nid, nvarid
66     integer, dimension(2), save :: start, epais
67    
68     !------------------------------------------------------------
69    
70     if (debut) then
71     lmt_pas = nint(86400./dtime * 1.0) ! pour une lecture une fois par jour
72     jour_lu_sur = jour - 1
73     allocate(alb_lu(klon))
74     allocate(rug_lu(klon))
75     endif
76    
77     if ((jour - jour_lu_sur) /= 0) deja_lu_sur = .false.
78    
79     if (check) write(*, *)modname, ':: jour_lu_sur, deja_lu_sur', jour_lu_sur, &
80     deja_lu_sur
81     if (check) write(*, *)modname, ':: itime, lmt_pas', itime, lmt_pas
82    
83     ! Tester d'abord si c'est le moment de lire le fichier
84     if (mod(itime-1, lmt_pas) == 0 .and. .not. deja_lu_sur) then
85    
86     ! Ouverture du fichier
87    
88 guez 61 ierr = NF90_OPEN ('limit.nc', NF90_NOWRITE, nid)
89     if (ierr.NE.NF90_NOERR) then
90 guez 54 abort_message &
91     = 'Pb d''ouverture du fichier de conditions aux limites'
92     call abort_gcm(modname, abort_message, 1)
93     endif
94    
95     ! La tranche de donnees a lire:
96    
97     start(1) = 1
98     start(2) = jour
99     epais(1) = klon
100     epais(2) = 1
101    
102     ! Lecture Albedo
103    
104 guez 61 ierr = NF90_INQ_VARID(nid, 'ALB', nvarid)
105     if (ierr /= NF90_NOERR) then
106 guez 54 abort_message = 'Le champ <ALB> est absent'
107     call abort_gcm(modname, abort_message, 1)
108     endif
109 guez 61 ierr = NF90_GET_VAR(nid, nvarid, alb_lu, start, epais)
110     if (ierr /= NF90_NOERR) then
111 guez 54 abort_message = 'Lecture echouee pour <ALB>'
112     call abort_gcm(modname, abort_message, 1)
113     endif
114    
115     ! Lecture rugosité
116    
117 guez 61 ierr = NF90_INQ_VARID(nid, 'RUG', nvarid)
118     if (ierr /= NF90_NOERR) then
119 guez 54 abort_message = 'Le champ <RUG> est absent'
120     call abort_gcm(modname, abort_message, 1)
121     endif
122 guez 61 ierr = NF90_GET_VAR(nid, nvarid, rug_lu, start, epais)
123     if (ierr /= NF90_NOERR) then
124 guez 54 abort_message = 'Lecture echouee pour <RUG>'
125     call abort_gcm(modname, abort_message, 1)
126     endif
127    
128    
129     ! Fin de lecture
130    
131 guez 61 ierr = NF90_CLOSE(nid)
132 guez 54 deja_lu_sur = .true.
133     jour_lu_sur = jour
134     endif
135    
136     ! Recopie des variables dans les champs de sortie
137    
138     !!$ lmt_alb = 0.0
139     !!$ lmt_rug = 0.0
140     lmt_alb = 999999.
141     lmt_rug = 999999.
142     DO ii = 1, knon
143     lmt_alb(ii) = alb_lu(knindex(ii))
144     lmt_rug(ii) = rug_lu(knindex(ii))
145     enddo
146    
147     END SUBROUTINE interfsur_lim
148    
149     end module interfsur_lim_m

  ViewVC Help
Powered by ViewVC 1.1.21