1 | ! -*- Mode: f90 -*- |
---|
2 | MODULE modeles |
---|
3 | !> Declare tous les tableaux |
---|
4 | !! |
---|
5 | USE declare |
---|
6 | USE dimensions |
---|
7 | USE mod_prih |
---|
8 | !! |
---|
9 | IMPLICIT NONE |
---|
10 | !! |
---|
11 | SAVE |
---|
12 | PUBLIC |
---|
13 | !! |
---|
14 | REAL (kind=rl), PARAMETER :: eps = EPSILON (1.0_rl) !< Standard precision epsilon |
---|
15 | REAL (kind=rl), PARAMETER :: eps10 = 10.0_rl * eps !< Standard precision epsilon * 10 |
---|
16 | REAL (kind=rl), PARAMETER :: epsd = EPSILON (1.0_rd) !< Quadruple precision epsilon |
---|
17 | REAL (kind=rl), PARAMETER :: epsd10 = 10.0_rd * epsd !< Quadruple precision epsilon * 10 |
---|
18 | REAL (kind=rl), PARAMETER :: epsfrac = 1.0E-10_rl !< Min fraction of sea acceptable |
---|
19 | !! |
---|
20 | |
---|
21 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: yas, yan, xaw, xae !< Limits of atmos box (south, north, west, east) |
---|
22 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: yos, yon, xow, xoe !< Limits of atmos box (south, north, west, east) |
---|
23 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xolont, xolatt, xosrft !< Lon, lat and surface at T point for ocean |
---|
24 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xolonu, xolatu, xosrfu !< idem point u |
---|
25 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xolonv, xolatv, xosrfv !< idem point v |
---|
26 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xolonf, xolatf, xosrff !< idem point f |
---|
27 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xalont, xalatt, xasrft !< For atmosphere |
---|
28 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xalonu, xalatu, xasrfu |
---|
29 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xalonv, xalatv, xasrfv |
---|
30 | REAL (kind=rl), DIMENSION (:), ALLOCATABLE :: xasrft_pol, xosrft_pol !< Surfaces calculées par les polygones. |
---|
31 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: nborda !< 1 if atmosphere point is over some land point of ocean grid |
---|
32 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: nbordo !< 1 if ocean point is over some land point of atmos grid |
---|
33 | REAL (kind=rl) , DIMENSION (:,:), ALLOCATABLE :: wo2a !< Weigts of interpolation ocean -> atmosphere |
---|
34 | INTEGER(kind=il) , DIMENSION (:,:), ALLOCATABLE :: ko2a !< Adresses ocean -> atmosphere |
---|
35 | REAL (kind=rl) , DIMENSION (:,:), ALLOCATABLE :: wa2o !< Weights of interpolation atmosphere -> ocean |
---|
36 | INTEGER (kind=il), DIMENSION (:,:), ALLOCATABLE :: ka2o ! Adresses atmosphere -> ocean |
---|
37 | REAL (kind=rl) , DIMENSION (:), ALLOCATABLE :: wasum !< Sum of weights of interpolation atmosphere -> ocean |
---|
38 | REAL (kind=rl) , DIMENSION (:), ALLOCATABLE :: wosum !< Sum of weights of interpolation ocean -> atmosphere |
---|
39 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: nva !< Number of ocean neighbor for each atm point |
---|
40 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: nvo !< Number of atmos neighbor for each ocean point |
---|
41 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: iomskt, iomsku, iomskv, iomskf !< Mask ocean model (sea=0, land=1) |
---|
42 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: iamskt, iamsku, iamskv !< Mask atm model (sea=0, land=1) |
---|
43 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: iamskp !< Mask to remove redundant point by periodicity and north folding |
---|
44 | INTEGER (kind=il), DIMENSION (:), ALLOCATABLE :: iomskp !< Mask to remove redundant point by periodicity and north folding |
---|
45 | REAL (kind=rl) , DIMENSION (:, :), ALLOCATABLE :: xo_ed !< Longitude of corner of oce boxes |
---|
46 | !< UL,UM,UR,MR,LR,LM,LL,ML.9 for middle of box |
---|
47 | REAL (kind=rl) , DIMENSION (:, :), ALLOCATABLE :: yo_ed !< Lat |
---|
48 | REAL (kind=rl) , DIMENSION (:, :), ALLOCATABLE :: xa_ed !< Atm |
---|
49 | REAL (kind=rl) , DIMENSION (:, :), ALLOCATABLE :: ya_ed |
---|
50 | !! |
---|
51 | CHARACTER (LEN=4) :: comod_a, comod_t, comod_u, comod_v, comod_f |
---|
52 | CHARACTER (LEN=4) :: camod_a, camod_t, camod_u, camod_v, camod_f |
---|
53 | !! |
---|
54 | INTEGER (kind=il) :: maxo, maxa ! |
---|
55 | INTEGER (kind=il) :: nsum !< Ponderation suivant le type de point trouve |
---|
56 | !! |
---|
57 | REAL (kind=rl) :: xinf, xsup !< Longitudes minimales et maximales de travail |
---|
58 | INTEGER (kind=il) :: ngrd, nsrf, nmsk, nwei4o2a, nwei4a2o, nwei8o2a, nwei8a2o, nchk, ndeb, nbug1, nwei8, nwei4 !< IO unit numbers |
---|
59 | !! |
---|
60 | REAL (kind=rl) :: ra = 6371229.0_rl !< Earth Radius (for OPA) |
---|
61 | REAL (kind=rl) :: xsurfa, xsurfo !< Earth surface in each model |
---|
62 | !! |
---|
63 | CHARACTER (LEN = 8) :: cladress, clweight !< Name of OASIS weights/adresses |
---|
64 | |
---|
65 | ! |
---|
66 | REAL(kind=rl), DIMENSION (:), ALLOCATABLE :: o2amask !< Ocean mask interpolated toward atmosphere |
---|
67 | REAL(kind=rl), DIMENSION (:), ALLOCATABLE :: a2omask !< Atmosphere mask interpolated toward ocean |
---|
68 | REAL(kind=rl), DIMENSION (:), ALLOCATABLE :: o2afull !< 1 on ocean interpolated toward atmosphere |
---|
69 | REAL(kind=rl), DIMENSION (:), ALLOCATABLE :: a2ofull !< 1 on atmosphere interpolated toward ocean |
---|
70 | ! |
---|
71 | INTEGER, DIMENSION (:), ALLOCATABLE :: o2amask_i_int !< Ocean mask interpolated toward atmosphere : full land only |
---|
72 | INTEGER, DIMENSION (:), ALLOCATABLE :: o2amask_i_ext !< Ocean mask interpolated toward atmosphere : all points with some land |
---|
73 | INTEGER, DIMENSION (:), ALLOCATABLE :: a2omask_i_int !< Atmosphere mask interpolated toward ocean : full land only |
---|
74 | INTEGER, DIMENSION (:), ALLOCATABLE :: a2omask_i_ext !< Atmosphere mask interpolated toward ocean : all points with some land |
---|
75 | !! |
---|
76 | INTEGER (kind = il), DIMENSION (:), ALLOCATABLE :: m2ai, m2aj, m2oi, m2oj, moi, moj, mai, maj |
---|
77 | INTEGER (kind = il), DIMENSION (:, :), ALLOCATABLE :: m1a, m1ar, m1o, m1or |
---|
78 | !! |
---|
79 | CONTAINS |
---|
80 | !! |
---|
81 | SUBROUTINE alloc_modeles |
---|
82 | !> Dimensionne tout les tableaux necessaires |
---|
83 | IMPLICIT NONE |
---|
84 | !! |
---|
85 | INTEGER (kind=il) :: ja, jo, jai, jaj, joi, joj |
---|
86 | INTEGER :: ierr |
---|
87 | !! |
---|
88 | WRITE (nout, *) 'Data types ' |
---|
89 | WRITE (nout, *) 'r_4 : ', r_4, 1.0_r_4, TINY(1.0_r_4), HUGE(1.0_r_4), EPSILON (1.0_r_4) |
---|
90 | WRITE (nout, *) 'r_8 : ', r_8, 1.0_r_8, TINY(1.0_r_8), HUGE(1.0_r_8), EPSILON (1.0_r_8) |
---|
91 | WRITE (nout, *) 'rd : ', rd , 1.0_rd , TINY(1.0_rd) , HUGE(1.0_rd) , EPSILON (1.0_rd) |
---|
92 | WRITE (nout, *) 'rl : ', rl , 1.0_rl , TINY(1.0_rl) , HUGE(1.0_rl) , EPSILON (1.0_rl) |
---|
93 | !! |
---|
94 | ALLOCATE (yas (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'yas', lreset = .TRUE., crout = 'common') |
---|
95 | ALLOCATE (yan (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'yan') |
---|
96 | ALLOCATE (xaw (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xaw') |
---|
97 | ALLOCATE (xae (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xae') |
---|
98 | |
---|
99 | ALLOCATE (yos (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'yos') |
---|
100 | ALLOCATE (yon (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'yon') |
---|
101 | ALLOCATE (xow (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xow') |
---|
102 | ALLOCATE (xoe (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xoe') |
---|
103 | ! |
---|
104 | ALLOCATE (xolont (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolont') |
---|
105 | ALLOCATE (xolonu (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolonu') |
---|
106 | ALLOCATE (xolonv (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolonv') |
---|
107 | ALLOCATE (xolonf (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolonf') |
---|
108 | ALLOCATE (xolatt (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolatt') |
---|
109 | ALLOCATE (xolatu (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolatu') |
---|
110 | ALLOCATE (xolatv (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolatv') |
---|
111 | ALLOCATE (xolatf (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xolatf') |
---|
112 | ALLOCATE (xosrft (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xosrft') |
---|
113 | ALLOCATE (xosrfu (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xosrfu') |
---|
114 | ALLOCATE (xosrfv (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xosrfv') |
---|
115 | ALLOCATE (xosrff (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xosrff') |
---|
116 | ! |
---|
117 | ALLOCATE (xosrft_pol (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'xosrft_pol') |
---|
118 | ALLOCATE (xasrft_pol (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xasrft_pol') |
---|
119 | ! |
---|
120 | ALLOCATE (xalont (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xalont') |
---|
121 | ALLOCATE (xalonu (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xalonu') |
---|
122 | ALLOCATE (xalonv (jpanv), STAT=ierr) ; CALL chk_allo (ierr, 'xalonv') |
---|
123 | ALLOCATE (xalatt (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xalatt') |
---|
124 | ALLOCATE (xalatu (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xalatu') |
---|
125 | ALLOCATE (xalatv (jpanv), STAT=ierr) ; CALL chk_allo (ierr, 'xalatv') |
---|
126 | ALLOCATE (xasrft (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xasrft') |
---|
127 | ALLOCATE (xasrfu (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'xasrfu') |
---|
128 | ALLOCATE (xasrfv (jpanv), STAT=ierr) ; CALL chk_allo (ierr, 'xasrfv') |
---|
129 | ! |
---|
130 | ALLOCATE (nborda (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'nborda') |
---|
131 | ALLOCATE (nbordo (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'nbordo') |
---|
132 | ! |
---|
133 | ALLOCATE (wo2a (jpo2a,jpan), STAT=ierr) ; CALL chk_allo (ierr, 'wo2a') |
---|
134 | ALLOCATE (ko2a (jpo2a,jpan), STAT=ierr) ; CALL chk_allo (ierr, 'ko2a') |
---|
135 | ALLOCATE (wa2o (jpa2o,jpon), STAT=ierr) ; CALL chk_allo (ierr, 'wa2o') |
---|
136 | ALLOCATE (ka2o (jpa2o,jpon), STAT=ierr) ; CALL chk_allo (ierr, 'ka2o') |
---|
137 | |
---|
138 | ALLOCATE (wasum (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'wasum') |
---|
139 | ALLOCATE (wosum (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'wosum') |
---|
140 | ! |
---|
141 | ALLOCATE (nvo (jpon), STAT=ierr) ; CALL chk_allo (ierr, 'nvo') |
---|
142 | ALLOCATE (nva (jpan), STAT=ierr) ; CALL chk_allo (ierr, 'nva') |
---|
143 | ! |
---|
144 | ALLOCATE (iomskt (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'iomskt') |
---|
145 | ALLOCATE (iomsku (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'iomsku') |
---|
146 | ALLOCATE (iomskv (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'iomskv') |
---|
147 | ALLOCATE (iomskf (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'iomskf') |
---|
148 | ALLOCATE (iamskt (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'iamskt') |
---|
149 | ALLOCATE (iamsku (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'iamsku') |
---|
150 | ALLOCATE (iamskv (jpanv), STAT=ierr) ; CALL chk_allo (ierr, 'iamskv') |
---|
151 | ALLOCATE (iomskp (jpon) , STAT=ierr) ; CALL chk_allo (ierr, 'iomskp') |
---|
152 | ALLOCATE (iamskp (jpan) , STAT=ierr) ; CALL chk_allo (ierr, 'iamskp') |
---|
153 | ! |
---|
154 | ALLOCATE (xo_ed (jpon, jpoe), STAT=ierr) ; CALL chk_allo (ierr, 'xo_ed') |
---|
155 | ALLOCATE (yo_ed (jpon, jpoe), STAT=ierr) ; CALL chk_allo (ierr, 'yo_ed') |
---|
156 | ALLOCATE (xa_ed (jpan, jpae), STAT=ierr) ; CALL chk_allo (ierr, 'xa_ed') |
---|
157 | ALLOCATE (ya_ed (jpan, jpae), STAT=ierr) ; CALL chk_allo (ierr, 'ya_ed') |
---|
158 | ! |
---|
159 | ALLOCATE (o2amask (jpan), STAT=ierr) ; CALL chk_allo (ierr, 'o2amask') |
---|
160 | ALLOCATE (a2omask (jpon), STAT=ierr) ; CALL chk_allo (ierr, 'a2omask') |
---|
161 | ALLOCATE (o2afull (jpan), STAT=ierr) ; CALL chk_allo (ierr, 'o2afull') |
---|
162 | ALLOCATE (a2ofull (jpon), STAT=ierr) ; CALL chk_allo (ierr, 'a2ofull') |
---|
163 | ALLOCATE (o2amask_i_int (jpan), STAT=ierr) ; CALL chk_allo (ierr, 'o2amask_i_int') |
---|
164 | ALLOCATE (o2amask_i_ext (jpan), STAT=ierr) ; CALL chk_allo (ierr, 'o2amask_i_ext') |
---|
165 | ALLOCATE (a2omask_i_int (jpon), STAT=ierr) ; CALL chk_allo (ierr, 'a2omask_i_int') |
---|
166 | ALLOCATE (a2omask_i_ext (jpon), STAT=ierr) ; CALL chk_allo (ierr, 'a2omask_i_ext') |
---|
167 | ! |
---|
168 | ! ---------------------------------------------------------------------------- |
---|
169 | ALLOCATE (m2ai (0:jpan), STAT=ierr) ; CALL chk_allo (ierr, 'm2ai') |
---|
170 | ALLOCATE (m2aj (0:jpan), STAT=ierr) ; CALL chk_allo (ierr, 'm2aj') |
---|
171 | ALLOCATE (mai (0:jpan), STAT=ierr) ; CALL chk_allo (ierr, 'mai ') |
---|
172 | ALLOCATE (maj (0:jpan), STAT=ierr) ; CALL chk_allo (ierr, 'maj ') |
---|
173 | m2ai (0) = 0_il ; m2aj (0) = 0_il |
---|
174 | DO ja = 1, jpan |
---|
175 | jai = MOD (ja - 1_il, jpai) + 1_il |
---|
176 | jaj = (ja - 1_il) / jpai + 1_il |
---|
177 | m2ai (ja) = jai |
---|
178 | m2aj (ja) = jaj |
---|
179 | mai (ja) = jai |
---|
180 | maj (ja) = MAX (1_il, MIN (jaj, jpaj)) |
---|
181 | IF (la_pole) THEN |
---|
182 | IF (jai == -1_il ) mai (ja) = jpai-1_il |
---|
183 | IF (jai == 0_il ) mai (ja) = jpai |
---|
184 | IF (jai == jpai+1_il) mai (ja) = 1_il |
---|
185 | IF (jai == jpai+2_il) mai (ja) = 2_il |
---|
186 | END IF |
---|
187 | END DO |
---|
188 | ! ---------------------------------------------------------------------------- |
---|
189 | ALLOCATE (m2oi (0:jpon), STAT=ierr) ; CALL chk_allo (ierr, 'm2oi') |
---|
190 | ALLOCATE (m2oj (0:jpon), STAT=ierr) ; CALL chk_allo (ierr, 'm2oj') |
---|
191 | ALLOCATE (moi (0:jpon), STAT=ierr) ; CALL chk_allo (ierr, 'moi ') |
---|
192 | ALLOCATE (moj (0:jpon), STAT=ierr) ; CALL chk_allo (ierr, 'moj ') |
---|
193 | m2oi (0) = 0_il ; m2oj (0) = 0_il |
---|
194 | moi (0) = 0_il ; moj (0) = 0_il |
---|
195 | DO jo = 1, jpon |
---|
196 | joi = MOD (jo - 1_il, jpoi) + 1_il |
---|
197 | joj = (jo - 1_il) / jpoi + 1_il |
---|
198 | m2oi (jo) = joi |
---|
199 | m2oj (jo) = joj |
---|
200 | moi (jo) = joi |
---|
201 | moj (jo) = MAX (1_il, MIN (joj, jpoj)) |
---|
202 | IF (noperio == 1 .OR. noperio == 4 .OR. noperio == -4_il) THEN |
---|
203 | IF (joi == -1_il ) moi (jo) = jpoi-3_il |
---|
204 | IF (joi == 0_il ) moi (jo) = jpoi-2_il |
---|
205 | IF (joi == 1_il ) moi (jo) = jpoi-1_il |
---|
206 | IF (joi == jpoi ) moi (jo) = 2_il |
---|
207 | IF (joi == jpoi+1_il) moi (jo) = 3_il |
---|
208 | IF (joi == jpoi+2_il) moi (jo) = 4_il |
---|
209 | ENDIF |
---|
210 | END DO |
---|
211 | ! ---------------------------------------------------------------------------- |
---|
212 | ALLOCATE (m1a (jpai, jpaj), STAT=ierr) ; CALL chk_allo (ierr, 'm1a ') |
---|
213 | ALLOCATE (m1ar (jpai, jpaj), STAT=ierr) ; CALL chk_allo (ierr, 'm1ar') |
---|
214 | DO jaj = 1, jpaj |
---|
215 | DO jai = 1, jpai |
---|
216 | m1a (jai, jaj) = jai + (jaj - 1_il) * jpai |
---|
217 | END DO |
---|
218 | END DO |
---|
219 | DO jaj = 1, jpaj |
---|
220 | DO jai = 1, jpai |
---|
221 | ja = m1a (jai, jaj) |
---|
222 | m1a (jai, jaj) = m1a (mai (ja), maj (ja)) |
---|
223 | END DO |
---|
224 | END DO |
---|
225 | ! ---------------------------------------------------------------------------- |
---|
226 | ALLOCATE (m1o (jpoi, jpoj), STAT=ierr) ; CALL chk_allo (ierr, 'm1o ') |
---|
227 | ALLOCATE (m1or (jpoi, jpoj), STAT=ierr) ; CALL chk_allo (ierr, 'm1or') |
---|
228 | DO joj = 1, jpoj |
---|
229 | DO joi = 1, jpoi |
---|
230 | m1o (joi, joj) = joi + (joj - 1_il) * jpoi |
---|
231 | END DO |
---|
232 | END DO |
---|
233 | DO joj = 1, jpoj |
---|
234 | DO joi = 1, jpoi |
---|
235 | jo = m1o (joi, joj) |
---|
236 | m1or (joi, joj) = m1o (moi (jo), moj (jo)) |
---|
237 | END DO |
---|
238 | END DO |
---|
239 | ! ---------------------------------------------------------------------------- |
---|
240 | |
---|
241 | !-$$ WRITE (nout,*) 'mai' |
---|
242 | !-$$ CALL prihin ( RESHAPE(mai (1:jpan), (/jpai, jpaj/)), kscale=3 ) |
---|
243 | !-$$ WRITE (nout,*) 'maj' |
---|
244 | !-$$ CALL prihin ( RESHAPE(maj (1:jpan), (/jpai, jpaj/)), kscale=3 ) |
---|
245 | !-$$ WRITE (nout,*) 'm2ai' |
---|
246 | !-$$ CALL prihin ( RESHAPE(m2ai(1:jpan), (/jpai, jpaj/)), kscale=3 ) |
---|
247 | !-$$ WRITE (nout,*) 'm2aj' |
---|
248 | !-$$ CALL prihin ( RESHAPE(m2aj(1:jpan), (/jpai, jpaj/)), kscale=3 ) |
---|
249 | !-$$ WRITE (nout,*) 'm1a' |
---|
250 | !-$$ CALL prihin (m1a , kscale=5) |
---|
251 | !-$$ WRITE (nout,*) 'm1ar' |
---|
252 | !-$$ CALL prihin (m1ar, kscale=5) |
---|
253 | !-$$ STOP |
---|
254 | |
---|
255 | END SUBROUTINE alloc_modeles |
---|
256 | END MODULE modeles |
---|