1 | include(dom.inc)
2 |
3 | SUBROUTINE read_data_slave
4 |
5 | ! ================================================================!
6 | ! !
7 | ! read_data_slave.F : Reads all data from input files and !
8 | ! allocates slave vectors. !
9 | ! !
10 | ! out : Slave-side global vectors with initialized !
11 | ! data obtained from *.in files. !
12 | ! !
13 | ! author : J. AMAYA (January 2009) !
14 | ! !
15 | ! ================================================================!
16 |
17 | USE mod_inout
18 | USE mod_slave
19 |
20 | ! Only for debug:
21 | ! USE mod_pmm
22 |
23 | IMPLICIT NONE
24 |
25 | INCLUDE 'dom_constants.h'
26 |
27 | DOM_INT :: i, j, k, icell, idir, icoef
28 | DOM_INT :: n, i_bande, patch
29 | DOM_INT :: iface, nbnodes
30 |
31 | DOM_REAL :: ddata
32 |
33 | CHARACTER*80 :: c2cfile
34 | CHARACTER*80 :: normfile, volafile, facesfile
35 | CHARACTER*80 :: kextfile, emisfile
36 | CHARACTER*80 :: clpropfile, cldatfile, fcfile
37 | CHARACTER*80 :: snbwnfile,cnodefile
38 | CHARACTER*80 :: facfile, propfile, progfile
39 | CHARACTER*80 :: lspecfile , sspecfile
40 | CHARACTER*80 :: wsggfile
41 |
42 | ! -----------------------!
43 | ! Initialize variables !
44 | ! -----------------------!
45 | ! WRITE(*,*) pmm_rank," >> SLAVE: Deallocating vetors"
46 |
47 | IF (ALLOCATED(is_neighs)) DEALLOCATE(is_neighs)
48 | IF (ALLOCATED(is_nfcelt)) DEALLOCATE(is_nfcelt)
49 | IF (ALLOCATED(is_pathway)) DEALLOCATE(is_pathway)
50 | IF (ALLOCATED(is_bcell)) DEALLOCATE(is_bcell)
51 | IF (ALLOCATED(is_bface)) DEALLOCATE(is_bface)
52 | IF (ALLOCATED(is_cnodes)) DEALLOCATE(is_cnodes)
53 | IF (ALLOCATED(is_cnnode)) DEALLOCATE(is_cnnode)
54 |
55 | IF (ALLOCATED(s_KCO)) DEALLOCATE(s_KCO)
56 | IF (ALLOCATED(s_KC)) DEALLOCATE(s_KC)
57 | IF (ALLOCATED(s_KH)) DEALLOCATE(s_KH)
58 | IF (ALLOCATED(s_DCO)) DEALLOCATE(s_DCO)
59 | IF (ALLOCATED(s_DC)) DEALLOCATE(s_DC)
60 | IF (ALLOCATED(s_DH)) DEALLOCATE(s_DH)
61 | IF (ALLOCATED(s_V)) DEALLOCATE(s_V)
62 | IF (ALLOCATED(s_k_scat)) DEALLOCATE(s_k_scat)
63 | IF (ALLOCATED(s_kabs_gray)) DEALLOCATE(s_kabs_gray)
64 | IF (ALLOCATED(s_S)) DEALLOCATE(s_S)
65 | IF (ALLOCATED(s_epsil)) DEALLOCATE(s_epsil)
66 | IF (ALLOCATED(s_Tf)) DEALLOCATE(s_Tf)
67 | IF (ALLOCATED(s_norm)) DEALLOCATE(s_norm)
68 | IF (ALLOCATED(s_celldata)) DEALLOCATE(s_celldata)
69 | IF (ALLOCATED(s_all_WVNB)) DEALLOCATE(s_all_WVNB)
70 | IF (ALLOCATED(s_all_DWVNB)) DEALLOCATE(s_all_DWVNB)
71 |
72 | IF (ALLOCATED(s_maxlen)) DEALLOCATE(s_maxlen)
73 | IF (ALLOCATED(s_ss)) DEALLOCATE(s_ss)
74 |
75 | ! -------------------!
76 | ! Read input files !
77 | ! -------------------!
78 |
79 | ! WRITE(*,*) pmm_rank," >> SLAVE: Seting file names"
80 |
81 | c2cfile = path(1:len_trim(path))//'/Cell2cells.in'
82 | normfile = path(1:len_trim(path))//'/Normals.in'
83 | volafile = path(1:len_trim(path))//'/Volumesareas.in'
84 | emisfile = path(1:len_trim(path))//'/Emissivities.in'
85 | kextfile = path(1:len_trim(path))//'/K_Extinction.in'
86 | clpropfile = path(1:len_trim(path))//'/CLProperties.in'
87 | cldatfile = path(1:len_trim(path))//'/CLdata.in'
88 | propfile = path(1:len_trim(path))//'/Properties.in'
89 | progfile = path(1:len_trim(path))//'/Progress.in'
90 | cnodefile = path(1:len_trim(path))//'/Cellnodes.in'
91 |
92 | lspecfile = path(1:len_trim(path))//'/L_SPEC.in'
93 | sspecfile = path(1:len_trim(path))//'/S_SPEC.in'
94 | fcfile = path(1:len_trim(path))//'/Facelist.in'
95 |
96 | ! WRITE(*,*) pmm_rank," >> SLAVE: Opening files"
97 |
98 | OPEN(FILE_C2C , FILE=c2cfile, FORM='UNFORMATTED')
99 | OPEN(FILE_NORM , FILE=normfile , FORM='UNFORMATTED')
100 | OPEN(FILE_VOLA , FILE=volafile , FORM='UNFORMATTED')
101 | OPEN(FILE_EMIS , FILE=emisfile , FORM='UNFORMATTED')
102 | OPEN(FILE_KEXT , FILE=kextfile , FORM='UNFORMATTED')
103 | OPEN(FILE_CLPRO, FILE=clpropfile, FORM='UNFORMATTED')
104 | OPEN(FILE_CLDAT, FILE=cldatfile , FORM='UNFORMATTED')
105 | OPEN(FILE_PROP , FILE=propfile , FORM='UNFORMATTED')
106 | OPEN(FILE_PROG , FILE=progfile , FORM='UNFORMATTED')
107 | OPEN(FILE_CLNOD, FILE=cnodefile , FORM='UNFORMATTED')
108 |
109 | ! ----------------------------------------------!
110 | ! Allocate and set properties for radiating gaz !
111 | ! (to be changed for N gaz radiation) !
112 | ! ----------------------------------------------!
113 |
114 | is_ngaz = 3
115 | ALLOCATE(is_nbandes(is_ngaz))
116 | is_nbandes = 0
117 | is_nbandes(GAZ_CO) = 48
118 | is_nbandes(GAZ_C) = 96
119 | is_nbandes(GAZ_H) = 367
120 |
121 | is_nallbandes = 371
122 |
123 | ! -----------------!
124 | ! Allocate vectors !
125 | ! -----------------!
126 |
127 | ! WRITE(*,*) pmm_rank," >> SLAVE allocating vectors"
128 |
129 | ! print*, " is_ncells : ", is_ncells
130 | ! print*, " is_nfacesmax : ", is_nfacesmax
131 | ! print*, " is_nallbandes: ", is_nallbandes
132 | ! print*, " is_nbandes : ", is_nbandes
133 |
134 | ALLOCATE(is_nfcelt (is_ncells))
135 | ALLOCATE(is_neighs (2*is_nfacesmax,is_ncells))
136 | ALLOCATE(is_pathway (is_ncells,is_ndir))
137 | ALLOCATE(is_bcell (is_nbfaces))
138 | ALLOCATE(is_bface (is_nbfaces))
139 | ALLOCATE(is_cnodes (is_ncells))
140 | ALLOCATE(is_cnnode (MAX_NNODES_CELL,is_ncells))
141 |
142 | ! WRITE(*,*) pmm_rank," >> SLAVE integer vectors allocated!"
143 |
144 | ALLOCATE(s_KCO (14,is_nbandes(GAZ_CO)))
145 | ALLOCATE(s_KC (14,is_nbandes(GAZ_C)))
146 | ALLOCATE(s_KH (14,is_nbandes(GAZ_H)))
147 | ALLOCATE(s_DCO (14,is_nbandes(GAZ_CO)))
148 | ALLOCAte(s_DC (14,is_nbandes(GAZ_C)))
149 | ALLOCATE(s_DH (14,is_nbandes(GAZ_H)))
150 | ALLOCATE(s_all_WVNB (is_nallbandes))
151 | ALLOCATE(s_all_DWVNB (is_nallbandes))
152 |
153 | ALLOCATE(s_V (is_ncells))
154 | ALLOCATE(s_norm (3,is_nfacesmax,is_ncells))
155 | ALLOCATE(s_S (is_nfacesmax,is_ncells))
156 |
157 | ALLOCATE(s_k_scat (is_nnodes))
158 | ALLOCATE(s_celldata (8,is_nnodes))
159 | ALLOCATE(s_epsil (is_nbfaces))
160 | ALLOCATE(s_Tf (is_nbfaces))
161 |
162 |
163 | ! WRITE(*,*) pmm_rank," >> SLAVE vectors allocated!"
164 |
165 | is_neighs = 0
166 |
167 | ! --------------------!
168 | ! Loop over all nodes !
169 | ! --------------------!
170 |
171 | IF ( mediumtype.eq.'GRAY' ) THEN
172 | ALLOCATE(s_kabs_gray (is_nnodes))
173 | ENDIF
174 |
175 | DO i=1,is_nnodes
176 |
177 | READ(FILE_PROP) icell, (s_celldata(j,icell),j=1,8)
178 |
179 | IF ( mediumtype.eq.'GRAY' ) THEN
180 | READ(FILE_KEXT) icell,s_kabs_gray(icell),s_k_scat(icell)
181 | ELSE
182 | READ(FILE_KEXT) icell,ddata,s_k_scat(icell)
183 | ENDIF
184 |
185 | ENDDO
186 |
187 | ! --------------------!
188 | ! Loop over all cells !
189 | ! --------------------!
190 |
191 | ! WRITE(*,*) pmm_rank," >> SLAVE: Reading *.in files"
192 |
193 | DO i=1,is_ncells
194 |
195 | ! print*, pmm_rank," reading cell", i
196 |
197 | READ(FILE_CLNOD) icell, is_cnodes(i), &
198 | & (is_cnnode(j,i),j=1,is_cnodes(i))
199 |
200 | READ(FILE_C2C) icell, &
201 | & is_nfcelt(icell), &
202 | & (is_neighs(j,icell),j=1,(2*is_nfcelt(icell)))
203 |
204 |
205 | READ(FILE_CLPRO) icell, &
206 | & is_nfcelt(icell), &
207 | & (ddata,patch,j=1,is_nfcelt(icell))
208 |
209 | READ(FILE_NORM) icell, &
210 | & is_nfcelt(icell), &
211 | & ((s_norm(k,j,icell),k=1,3),j=1,is_nfcelt(icell))
212 |
213 | READ(FILE_VOLA) icell, &
214 | & is_nfcelt(icell), &
215 | & s_V(icell), &
216 | & (s_S(j,icell),j=1,is_nfcelt(icell))
217 |
218 | ENDDO
219 |
220 | ! ----------------------!
221 | ! Reading boundary data !
222 | ! ----------------------!
223 |
224 | DO i = 1, is_nbfaces
225 |
226 | READ(FILE_CLDAT) is_bcell(i), is_bface(i), s_epsil(i), s_Tf(i)
227 |
228 | ENDDO
229 |
230 | ! TEST
231 | ! print*, pmm_rank," TEST: Tf =", s_Tf
232 | ! print*, pmm_rank," TEST: epsil=", s_epsil
233 |
234 | CLOSE(FILE_CLDAT)
235 |
236 | ! ----------------!
237 | ! Reading pathway !
238 | ! ----------------!
239 |
240 | i = 1
241 | j = 1
242 | DO WHILE (i.lt.1000)
243 |
244 | IF ( (i.ge.is_dird).and.(i.le.is_dirf) ) THEN
245 | READ(FILE_PROG) (is_pathway(n,j), n=1, is_ncells)
246 | j = j + 1
247 | ELSE
248 | READ(FILE_PROG)
249 | ENDIF
250 |
251 | IF (i.ge.is_dirf) THEN
252 | i = 2000
253 | ENDIF
254 |
255 | i = i + 1
256 |
257 | ENDDO
258 |
259 | CLOSE(FILE_PROG)
260 |
261 | ! ---------------------------------!
262 | ! Read spectral data for each band !
263 | ! ---------------------------------!
264 |
265 | ! WRITE(*,*) pmm_rank," >> SLAVE: Reading spectral data"
266 |
267 | snbwnfile = pathspec(1:len_trim(pathspec))//'/SNBWN'
268 |
269 | IF (mediumtype.ne.'GRAY') THEN
270 |
271 | OPEN(FILE_SNBWN,FILE=snbwnfile)
272 | i_bande=1
273 |
274 | DO WHILE (i_bande .le. is_nallbandes)
275 |
276 | READ(FILE_SNBWN,*) s_all_WVNB(i_bande),s_all_DWVNB(i_bande)
277 |
278 | IF (s_all_WVNB(i_bande).lt.0.) THEN
279 | i_bande = is_nallbandes + 1 !arret de la boucle
280 | ENDIF
281 |
282 | i_bande=i_bande+1
283 |
284 | ENDDO
285 |
286 | CLOSE(FILE_SNBWN)
287 |
288 | ENDIF
289 |
290 | ! ----------------------------!
291 | ! Read spectral data for WSGG !
292 | ! ----------------------------!
293 |
294 | wsggfile = pathspec(1:len_trim(pathspec))// &
295 | & '/WSGG_Soufiani_Djavdan_H20_CO2'
296 |
297 | IF (mediumtype.eq.'WSGG') THEN
298 |
299 | ALLOCATE(s_alpha (6,is_ngg))
300 | ALLOCATE(s_kwsgg (is_ngg))
301 |
302 | OPEN(UNIT=FILE_Wsgg,FILE=wsggfile,FORM='FORMATTED')
303 | READ(FILE_Wsgg,*)
304 |
305 | DO i=1,is_ngg
306 | READ(FILE_Wsgg,*) s_kwsgg(i),(s_alpha(j,i),j=1,6)
307 | ENDDO
308 |
309 | CLOSE(FILE_Wsgg)
310 |
311 | IF (ALLOCATED(is_facenodes)) DEALLOCATE(is_facenodes)
312 | ALLOCATE(is_facenodes(is_nfacesmax, is_nfaces))
313 | is_facenodes = 0
314 |
315 | OPEN(FILE_FC ,FILE=fcfile,FORM='UNFORMATTED')
316 | DO i=1, is_nfaces
317 | READ(FILE_FC) iface, nbnodes, &
318 | & (is_facenodes(j,i),j=2,nbnodes+1)
319 | is_facenodes(1,i) = nbnodes
320 | ENDDO
321 | CLOSE(FILE_FC)
322 |
323 | ENDIF
324 |
325 | ! -------------------------------------------!
326 | ! Read data for exponential band integration !
327 | ! -------------------------------------------!
328 |
329 | IF (spascheme.eq.EXPON) THEN
330 |
331 | ALLOCATE(s_maxlen (is_ncells,is_ndir))
332 | ALLOCATE(s_ss (is_nfacesmax,is_ncells,is_ndir))
333 |
334 | OPEN(FILE_LSPEC,FILE=lspecfile,FORM='unformatted')
335 | OPEN(FILE_SSPEC,FILE=sspecfile,FORM='unformatted')
336 |
337 | s_ss =0.
338 | i = 1
339 | j = 1
340 | DO WHILE (i.lt.1000)
341 |
342 | IF ( (i.ge.is_dird).and.(i.le.is_dirf) ) THEN
343 | READ(FILE_LSPEC) (s_maxlen(icell,idir), &
344 | & icell=1,is_ncells)
345 | READ(FILE_SSPEC)((s_ss(icoef,icell,idir), &
346 | & icell=1,is_ncells),icoef=1,4)
347 | j = j + 1
348 | ELSE
349 | READ(FILE_LSPEC)
350 | READ(FILE_SSPEC)
351 | ENDIF
352 |
353 | IF (i.ge.is_dirf) THEN
354 | i = 2000
355 | ENDIF
356 |
357 | i = i + 1
358 |
359 | ENDDO
360 |
361 | CLOSE(FILE_LSPEC)
362 | CLOSE(FILE_SSPEC)
363 |
364 | ENDIF
365 |
366 | ! ------------------!
367 | ! Close all files !
368 | ! ------------------!
369 |
370 | CLOSE(FILE_NODES)
371 | CLOSE(FILE_C2C)
372 | CLOSE(FILE_CFACE)
373 | CLOSE(FILE_C2FAC)
374 | CLOSE(FILE_CCELL)
375 | CLOSE(FILE_CLNOD)
376 | CLOSE(FILE_EXTRN)
377 | CLOSE(FILE_EMIS)
378 | CLOSE(FILE_KSCA)
379 | CLOSE(FILE_CLPRO)
380 | CLOSE(FILE_CLFAC)
381 | CLOSE(FILE_NORM)
382 | CLOSE(FILE_VOLA)
383 | CLOSE(FILE_PROG)
384 | CLOSE(FILE_PROP)
385 | CLOSE(FILE_KEXT)
386 |
387 | ! ------------------------------------!
388 | ! Read spectral properties of gases !
389 | ! ------------------------------------!
390 |
391 | ! WRITE(*,*) pmm_rank," >> SLAVE: Reading gas properties"
392 |
393 | CALL PARAM_SLAVE(pathspec)
394 |
395 | END SUBROUTINE read_data_slave