read_data_slave.F [SRC] [CPP] [JOB] [SCAN]
SOURCES / INOUT



   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