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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (show 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 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 use netcdf
19
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 ierr = NF90_OPEN ('limit.nc', NF90_NOWRITE, nid)
89 if (ierr.NE.NF90_NOERR) then
90 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 ierr = NF90_INQ_VARID(nid, 'ALB', nvarid)
105 if (ierr /= NF90_NOERR) then
106 abort_message = 'Le champ <ALB> est absent'
107 call abort_gcm(modname, abort_message, 1)
108 endif
109 ierr = NF90_GET_VAR(nid, nvarid, alb_lu, start, epais)
110 if (ierr /= NF90_NOERR) then
111 abort_message = 'Lecture echouee pour <ALB>'
112 call abort_gcm(modname, abort_message, 1)
113 endif
114
115 ! Lecture rugosité
116
117 ierr = NF90_INQ_VARID(nid, 'RUG', nvarid)
118 if (ierr /= NF90_NOERR) then
119 abort_message = 'Le champ <RUG> est absent'
120 call abort_gcm(modname, abort_message, 1)
121 endif
122 ierr = NF90_GET_VAR(nid, nvarid, rug_lu, start, epais)
123 if (ierr /= NF90_NOERR) then
124 abort_message = 'Lecture echouee pour <RUG>'
125 call abort_gcm(modname, abort_message, 1)
126 endif
127
128
129 ! Fin de lecture
130
131 ierr = NF90_CLOSE(nid)
132 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