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 | !       Modified by       : T. PEDOT (November 2010) Add Probes         !
  15 | !                                                                       !
  16 | !       ================================================================!
  17 | 
  18 |         USE mod_inout
  19 |         USE mod_slave
  20 |         USE mod_pmm
  21 | 
  22 |         IMPLICIT NONE
  23 | 
  24 |         INCLUDE 'dom_constants.h'
  25 |         include 'pmm_constants.h'
  26 | 
  27 |         DOM_INT      :: i, j, k, icell, idir, icoef
  28 |         DOM_INT      :: n, i_bande, patch
  29 |         DOM_INT      :: iface, nbnodes, ios
  30 | 
  31 |         DOM_REAL     :: ddata
  32 | 
  33 |         CHARACTER*80 :: c2cfile
  34 |         CHARACTER*80 :: normfile, volafile, facesfile
  35 |         CHARACTER*80 :: kextfile
  36 |         CHARACTER*80 :: clpropfile, cldatfile, fcfile
  37 |         CHARACTER*80 :: snbwnfile,cnodefile, quadfile
  38 |         CHARACTER*80 :: facfile, propfile, progfile
  39 |         CHARACTER*80 :: lspecfile , sspecfile
  40 |         CHARACTER*80 :: wsggfile, trackfile
  41 | 
  42 | !       Tabulation variables
  43 |         CHARACTER*64     :: tabfile
  44 |         DOM_REAL         :: MH2O, MCO2, MCO
  45 | 
  46 | !       --------------------!
  47 | !       Loop over all nodes !
  48 | !       --------------------!
  49 | 
  50 |         kextfile   = path(1:len_trim(path))//'/K_Extinction.in'
  51 |         propfile   = path(1:len_trim(path))//'/Properties.in'
  52 | 
  53 |         OPEN(FILE_KEXT , FILE=kextfile  , FORM='UNFORMATTED')
  54 |         OPEN(FILE_PROP , FILE=propfile  , FORM='UNFORMATTED')
  55 | 
  56 |         IF (ALLOCATED(s_celldata))  DEALLOCATE(s_celldata)
  57 |         IF (ALLOCATED(s_k_scat))    DEALLOCATE(s_k_scat)
  58 |         IF (ALLOCATED(s_kabs_gray)) DEALLOCATE(s_kabs_gray)
  59 | 
  60 |         ALLOCATE(s_celldata    (8,is_nnodes))
  61 |         ALLOCATE(s_k_scat      (is_nnodes))
  62 |         IF ( mediumtype.eq.'GRAY' ) THEN
  63 |           ALLOCATE(s_kabs_gray (is_nnodes))
  64 |         ENDIF
  65 | 
  66 |         DO i=1,is_nnodes
  67 | 
  68 |           READ(FILE_PROP) icell, (s_celldata(j,icell),j=1,8)
  69 | 
  70 |           IF ( mediumtype.eq.'GRAY' ) THEN
  71 |             READ(FILE_KEXT) icell,s_kabs_gray(icell),s_k_scat(icell)
  72 |           ELSE
  73 |             READ(FILE_KEXT) icell,ddata,s_k_scat(icell)
  74 |           ENDIF
  75 | 
  76 |         ENDDO
  77 | 
  78 |         CLOSE(FILE_PROP)
  79 |         CLOSE(FILE_KEXT)
  80 | 
  81 | !       --------------------!
  82 | !       Loop over all cells !
  83 | !       --------------------!
  84 | 
  85 |         cnodefile  = path(1:len_trim(path))//'/Cellnodes.in'
  86 |         c2cfile    = path(1:len_trim(path))//'/Cell2cells.in'
  87 |         clpropfile = path(1:len_trim(path))//'/CLProperties.in'
  88 |         normfile   = path(1:len_trim(path))//'/Normals.in'
  89 |         volafile   = path(1:len_trim(path))//'/Volumesareas.in'
  90 | 
  91 |         OPEN(FILE_CLNOD, FILE=cnodefile , FORM='UNFORMATTED')
  92 |         OPEN(FILE_C2C  , FILE=c2cfile,    FORM='UNFORMATTED')
  93 |         OPEN(FILE_CLPRO, FILE=clpropfile, FORM='UNFORMATTED')
  94 |         OPEN(FILE_NORM , FILE=normfile  , FORM='UNFORMATTED')
  95 |         OPEN(FILE_VOLA , FILE=volafile  , FORM='UNFORMATTED')
  96 | 
  97 |         IF (ALLOCATED(is_cnodes))   DEALLOCATE(is_cnodes)
  98 |         IF (ALLOCATED(is_cnnode))   DEALLOCATE(is_cnnode)
  99 |         IF (ALLOCATED(is_nfcelt))   DEALLOCATE(is_nfcelt)
 100 |         IF (ALLOCATED(is_neighs))   DEALLOCATE(is_neighs)
 101 |         IF (ALLOCATED(s_norm))      DEALLOCATE(s_norm)
 102 |         IF (ALLOCATED(s_V))         DEALLOCATE(s_V)
 103 |         IF (ALLOCATED(s_S))         DEALLOCATE(s_S)
 104 | 
 105 |         ALLOCATE(is_cnodes  (is_ncells))
 106 |         ALLOCATE(is_cnnode  (MAX_NNODES_CELL,is_ncells))
 107 |         ALLOCATE(is_nfcelt  (is_ncells))
 108 |         ALLOCATE(is_neighs  (2*is_nfacesmax,is_ncells))
 109 |         ALLOCATE(s_norm     (3,is_nfacesmax,is_ncells))
 110 |         ALLOCATE(s_V        (is_ncells))
 111 |         ALLOCATE(s_S        (is_nfacesmax,is_ncells))
 112 | 
 113 |         is_neighs        = 0
 114 | 
 115 | !       WRITE(*,*) pmm_rank," >> SLAVE: Reading *.in files"
 116 | 
 117 |         DO i=1,is_ncells
 118 | 
 119 | !         print*, pmm_rank,"     reading cell", i
 120 | 
 121 |           READ(FILE_CLNOD) icell, is_cnodes(i),                         &
 122 |      &                    (is_cnnode(j,i),j=1,is_cnodes(i))
 123 | 
 124 |           READ(FILE_C2C) icell,                                         &
 125 |      &                   is_nfcelt(icell),                              &
 126 |      &                  (is_neighs(j,icell),j=1,(2*is_nfcelt(icell)))
 127 | 
 128 | 
 129 |           READ(FILE_CLPRO) icell,                                       &
 130 |      &                     is_nfcelt(icell),                            &
 131 |      &                    (ddata,patch,j=1,is_nfcelt(icell))
 132 | 
 133 |           READ(FILE_NORM) icell,                                        &
 134 |      &                    is_nfcelt(icell),                             &
 135 |      &                  ((s_norm(k,j,icell),k=1,3),j=1,is_nfcelt(icell))
 136 | 
 137 |           READ(FILE_VOLA) icell,                                        &
 138 |      &                    is_nfcelt(icell),                             &
 139 |      &                    s_V(icell),                                   &
 140 |      &                   (s_S(j,icell),j=1,is_nfcelt(icell))
 141 | 
 142 |         ENDDO
 143 | 
 144 |         CLOSE(FILE_CLNOD)
 145 |         CLOSE(FILE_C2C)
 146 |         CLOSE(FILE_CLPRO)
 147 |         CLOSE(FILE_NORM)
 148 |         CLOSE(FILE_VOLA)
 149 | 
 150 | !       ----------------------!
 151 | !       Reading boundary data !
 152 | !       ----------------------!
 153 | 
 154 |         cldatfile  = path(1:len_trim(path))//'/CLdata.in'
 155 |         OPEN(FILE_CLDAT, FILE=cldatfile , FORM='UNFORMATTED')
 156 | 
 157 |         IF (ALLOCATED(is_bcell))    DEALLOCATE(is_bcell)
 158 |         IF (ALLOCATED(is_bface))    DEALLOCATE(is_bface)
 159 |         IF (ALLOCATED(s_epsil))     DEALLOCATE(s_epsil)
 160 |         IF (ALLOCATED(s_Tf))        DEALLOCATE(s_Tf)
 161 | 
 162 |         ALLOCATE(is_bcell   (is_nbfaces))
 163 |         ALLOCATE(is_bface   (is_nbfaces))
 164 |         ALLOCATE(s_epsil    (is_nbfaces))
 165 |         ALLOCATE(s_Tf       (is_nbfaces))
 166 | 
 167 |         DO i = 1, is_nbfaces
 168 | 
 169 |           READ(FILE_CLDAT) is_bcell(i), is_bface(i), s_epsil(i), s_Tf(i)
 170 | 
 171 |         ENDDO
 172 | 
 173 | !       TEST
 174 | !       print*, pmm_rank," TEST: Tf   =", s_Tf
 175 | !       print*, pmm_rank," TEST: epsil=", s_epsil
 176 | 
 177 |         CLOSE(FILE_CLDAT)
 178 | 
 179 |         IF (mediumtype.ne.'SNB-CK') THEN
 180 | 
 181 |           IF (ALLOCATED(is_facenodes)) DEALLOCATE(is_facenodes)
 182 |           ALLOCATE(is_facenodes(is_nfacesmax, is_nfaces))
 183 |           is_facenodes = 0
 184 | 
 185 |           fcfile    = path(1:len_trim(path))//'/Facelist.in'
 186 |           OPEN(FILE_FC ,FILE=fcfile,FORM='UNFORMATTED')
 187 |           DO i=1, is_nfaces
 188 |             READ(FILE_FC) iface, nbnodes,                               &
 189 |      &                    (is_facenodes(j,i),j=2,nbnodes+1)
 190 |             is_facenodes(1,i) = nbnodes
 191 |           ENDDO
 192 |           CLOSE(FILE_FC)
 193 | 
 194 |         ENDIF
 195 | 
 196 | !       ---------------------------------------!
 197 | !       Reading pathway and angular quadrature !
 198 | !       ---------------------------------------!
 199 | 
 200 |         quadfile   = path(1:len_trim(path))//'/Quadrature.in'
 201 |         progfile   = path(1:len_trim(path))//'/Progress.in'
 202 | 
 203 |         OPEN(FILE_QUADR, FILE=quadfile  , FORM='UNFORMATTED')
 204 |         OPEN(FILE_PROG , FILE=progfile  , FORM='UNFORMATTED')
 205 | 
 206 |         IF (ALLOCATED(s_mu))        DEALLOCATE(s_mu)
 207 |         IF (ALLOCATED(s_eta))       DEALLOCATE(s_eta)
 208 |         IF (ALLOCATED(s_ksi))       DEALLOCATE(s_ksi)
 209 |         IF (ALLOCATED(s_w))         DEALLOCATE(s_w)
 210 |         IF (ALLOCATED(is_pathway))  DEALLOCATE(is_pathway)
 211 | 
 212 |         ALLOCATE(s_mu          (is_ndir))
 213 |         ALLOCATE(s_eta         (is_ndir))
 214 |         ALLOCATE(s_ksi         (is_ndir))
 215 |         ALLOCATE(s_w           (is_ndir))
 216 |         ALLOCATE(is_pathway (is_ncells,is_ndir))
 217 | 
 218 |         i = 1
 219 |         j = 1
 220 |         DO WHILE (i.lt.1000)
 221 | 
 222 |           IF ( (i.ge.is_dird).and.(i.le.is_dirf) ) THEN
 223 |             READ(FILE_QUADR) s_mu(j), s_eta(j), s_ksi(j), s_w(j)
 224 |             READ(FILE_PROG) (is_pathway(n,j), n=1, is_ncells)
 225 |             j = j + 1
 226 |           ELSE
 227 |             READ(FILE_QUADR)
 228 |             READ(FILE_PROG)
 229 |           ENDIF
 230 | 
 231 |           IF (i.ge.is_dirf) THEN
 232 |             i = 2000
 233 |           ENDIF
 234 | 
 235 |           i = i + 1
 236 | 
 237 |         ENDDO
 238 | 
 239 |         CLOSE(FILE_QUADR)
 240 |         CLOSE(FILE_PROG)
 241 | 
 242 | !       -------------------------------------------!
 243 | !       Read data for exponential band integration !
 244 | !       -------------------------------------------!
 245 | 
 246 |         IF (spascheme.eq.EXPON) THEN
 247 | 
 248 |           lspecfile = path(1:len_trim(path))//'/L_SPEC.in'
 249 |           sspecfile = path(1:len_trim(path))//'/S_SPEC.in'
 250 | 
 251 |           OPEN(FILE_LSPEC,FILE=lspecfile,FORM='unformatted')
 252 |           OPEN(FILE_SSPEC,FILE=sspecfile,FORM='unformatted')
 253 | 
 254 |           IF (ALLOCATED(s_maxlen))    DEALLOCATE(s_maxlen)
 255 |           IF (ALLOCATED(s_ss))        DEALLOCATE(s_ss)
 256 |           ALLOCATE(s_maxlen (is_ncells,is_ndir))
 257 |           ALLOCATE(s_ss     (is_nfacesmax,is_ncells,is_ndir))
 258 | 
 259 |           s_ss =0.
 260 |           i = 1
 261 |           j = 1
 262 |           DO WHILE (i.lt.1000)
 263 | 
 264 |             IF ( (i.ge.is_dird).and.(i.le.is_dirf) ) THEN
 265 |               READ(FILE_LSPEC) (s_maxlen(icell,idir),                   &
 266 |      &                        icell=1,is_ncells)
 267 |               READ(FILE_SSPEC)((s_ss(icoef,icell,idir),                 &
 268 |      &                        icell=1,is_ncells),icoef=1,4)
 269 |               j = j + 1
 270 |             ELSE
 271 |               READ(FILE_LSPEC)
 272 |               READ(FILE_SSPEC)
 273 |             ENDIF
 274 | 
 275 |             IF (i.ge.is_dirf) THEN
 276 |               i = 2000
 277 |             ENDIF
 278 | 
 279 |             i = i + 1
 280 | 
 281 |           ENDDO
 282 | 
 283 |           CLOSE(FILE_LSPEC)
 284 |           CLOSE(FILE_SSPEC)
 285 | 
 286 |         ENDIF
 287 | 
 288 | !       ------------!
 289 | !       Read probes !
 290 | !       ------------!
 291 | 
 292 |         trackfile  = path(1:len_trim(path))//'/Track.in'
 293 |         OPEN(FILE_TRACK, FILE=trackfile , FORM='FORMATTED', IOSTAT =ios,&
 294 |      &       STATUS='old')
 295 | 
 296 |         is_nprobes = 0
 297 |         IF(ios.eq.0) THEN 
 298 | 
 299 |           IF (ALLOCATED(s_norm_probe)) DEALLOCATE(s_norm_probe)
 300 |           IF (ALLOCATED(is_norm_probe)) DEALLOCATE(is_norm_probe)
 301 |           IF (ALLOCATED(is_pcells))    DEALLOCATE(is_pcells)
 302 | 
 303 |           READ(FILE_TRACK,*) is_nprobes
 304 |           ALLOCATE(s_norm_probe(3,is_nprobes)) 
 305 |           s_norm_probe(:,:)=0.0 
 306 |           ALLOCATE(is_norm_probe(is_nprobes)) 
 307 |           is_norm_probe(:)=0 
 308 | 
 309 | !         The 3 first row of s_norm_probe are coordinates 
 310 | !         the is_norm_probe is the number of the probe cell 
 311 | 
 312 |           DO i=1,is_nprobes
 313 | 
 314 |             READ(FILE_TRACK,*) icell,is_norm_probe(i),                 &
 315 |      &      (s_norm_probe(k,i) ,k=1,3)
 316 |             
 317 |           ENDDO
 318 |           i=1
 319 |           IF(is_nprobes.gt.0) THEN
 320 |             ALLOCATE(is_pcells(is_ncells))
 321 |             is_pcells(:) = 0
 322 |              
 323 | !           The probes must be shorten by incresing order 
 324 |             DO i=1,is_nprobes
 325 |               DO icell=1,is_ncells
 326 |                 IF(icell.eq.is_norm_probe(i)) THEN
 327 |                   is_pcells(icell) = i
 328 |                 ENDIF
 329 |               ENDDO
 330 |             ENDDO
 331 | 
 332 |           ENDIF
 333 | 
 334 |         ENDIF
 335 | 
 336 |         CLOSE(FILE_TRACK)
 337 | 
 338 | !       ---------------------------------!
 339 | !       Read spectral data for each band !
 340 | !       ---------------------------------!
 341 |         is_ngaz = 3
 342 |         ALLOCATE(is_nbandes(is_ngaz))
 343 |         is_nbandes         = 0
 344 |         is_nbandes(GAZ_CO) = 48
 345 |         is_nbandes(GAZ_C)  = 96
 346 |         is_nbandes(GAZ_H)  = 367
 347 | 
 348 |         is_nallbandes = 371
 349 | 
 350 | !       WRITE(*,*) pmm_rank," >> SLAVE: Reading spectral data"
 351 | 
 352 |         snbwnfile = pathspec(1:len_trim(pathspec))//'/SNBWN'
 353 | 
 354 |         IF (mediumtype.ne.'GRAY') THEN
 355 | !         ----------------------------------------------!
 356 | !         Allocate and set properties for radiating gaz !
 357 | !         (to be changed for N gaz radiation)           !
 358 | !         ----------------------------------------------!
 359 |           IF (ALLOCATED(s_KCO))       DEALLOCATE(s_KCO)
 360 |           IF (ALLOCATED(s_KC))        DEALLOCATE(s_KC)
 361 |           IF (ALLOCATED(s_KH))        DEALLOCATE(s_KH)
 362 |           IF (ALLOCATED(s_DCO))       DEALLOCATE(s_DCO)
 363 |           IF (ALLOCATED(s_DC))        DEALLOCATE(s_DC)
 364 |           IF (ALLOCATED(s_DH))        DEALLOCATE(s_DH)
 365 |           ALLOCATE(s_KCO         (14,is_nbandes(GAZ_CO)))
 366 |           ALLOCATE(s_KC          (14,is_nbandes(GAZ_C)))
 367 |           ALLOCATE(s_KH          (14,is_nbandes(GAZ_H)))
 368 |           ALLOCATE(s_DCO         (14,is_nbandes(GAZ_CO)))
 369 |           ALLOCAte(s_DC          (14,is_nbandes(GAZ_C)))
 370 |           ALLOCATE(s_DH          (14,is_nbandes(GAZ_H)))
 371 | 
 372 | !         ------------------------------------!
 373 | !         Read spectral properties of gases !
 374 | !         ------------------------------------!
 375 | 
 376 | !         WRITE(*,*) pmm_rank," >> SLAVE: Reading gas properties"
 377 |           IF((mediumtype.ne.'GRAY').and.(mediumtype.ne.'WSGG')) THEN
 378 |             CALL PARAM_SLAVE(pathspec,nb_base)
 379 |           ENDIF
 380 | 
 381 |           IF (ALLOCATED(s_all_WVNB))  DEALLOCATE(s_all_WVNB)
 382 |           IF (ALLOCATED(s_all_DWVNB)) DEALLOCATE(s_all_DWVNB)
 383 |           ALLOCATE(s_all_WVNB    (is_nallbandes))
 384 |           ALLOCATE(s_all_DWVNB   (is_nallbandes))
 385 | 
 386 |           OPEN(FILE_SNBWN,FILE=snbwnfile)
 387 |           i_bande=1
 388 | 
 389 |           DO WHILE (i_bande .le. is_nallbandes)
 390 | 
 391 |              READ(FILE_SNBWN,*) s_all_WVNB(i_bande),s_all_DWVNB(i_bande)
 392 | 
 393 |              IF (s_all_WVNB(i_bande).lt.0.) THEN
 394 |                i_bande = is_nallbandes + 1 !arret de la boucle
 395 |              ENDIF
 396 | 
 397 |              i_bande=i_bande+1
 398 | 
 399 |           ENDDO
 400 | 
 401 |           CLOSE(FILE_SNBWN)
 402 | 
 403 |         ENDIF
 404 | 
 405 | !       ----------------------------!
 406 | !       Read spectral data for WSGG !
 407 | !       ----------------------------!
 408 | 
 409 |         wsggfile   = pathspec(1:len_trim(pathspec))//                   &
 410 |      &               '/WSGG_Soufiani_Djavdan_H20_CO2'
 411 | 
 412 |         IF (mediumtype.eq.'WSGG') THEN
 413 | 
 414 |           ALLOCATE(s_alpha (6,is_ngg))
 415 |           ALLOCATE(s_kwsgg (is_ngg))
 416 | 
 417 |           OPEN(UNIT=FILE_Wsgg,FILE=wsggfile,FORM='FORMATTED')
 418 |           READ(FILE_Wsgg,*)
 419 | 
 420 |           DO i=1,is_ngg
 421 |             READ(FILE_Wsgg,*) s_kwsgg(i),(s_alpha(j,i),j=1,6)
 422 |           ENDDO
 423 | 
 424 |           CLOSE(FILE_Wsgg)
 425 | 
 426 |          ENDIF
 427 | 
 428 | !       -----------------------------!
 429 | !       Read data for tabulated FSK  !
 430 | !       and set the number of points !
 431 | !       for the spectral quadrature  !
 432 | !       -----------------------------!
 433 | 
 434 |         IF ((mediumtype.eq.'TFSK').or.(mediumtype.eq.'TFSCK')) THEN
 435 |           tabfile = pathspec(1:len_trim(pathspec))//'/table.dat'
 436 |           IF (pmm_rank.eq.PMM_HOST) THEN
 437 |             PRINT*, "  -> Tabulated File : ",trim(tabfile)
 438 |           ENDIF
 439 | 
 440 |           OPEN(FILE_TAB,FILE=tabfile,FORM='FORMATTED')
 441 |           READ(FILE_TAB,*) is_nkabs
 442 |           READ(FILE_TAB,*) s_DT
 443 |           READ(FILE_TAB,*) s_DYH, MH2O
 444 |           READ(FILE_TAB,*) s_DYC, MCO2
 445 |           READ(FILE_TAB,*) s_DYCO, MCO
 446 |           CLOSE(FILE_TAB)
 447 | 
 448 |           is_nT   = INT((2900-300)/s_DT)  + 1
 449 |           is_nYH  = INT((MH2O-0.0)/s_DYH) + 1
 450 |           is_nYC  = INT((MCO2-0.0)/s_DYC) + 1
 451 |           is_nYCO = INT((MCO-0.0)/s_DYCO) + 1
 452 | 
 453 |           ALLOCATE(s_tabkabs(is_nYH,is_nYC,is_nYCO,is_nT,is_nkabs))
 454 | 
 455 |           CALL readtab(tabfile,s_tabkabs, is_nYH, is_nYC, is_nYCO,      &
 456 |      &                 is_nT, is_nkabs, mediumtype, s_dataref) 
 457 | 
 458 |           IF (pmm_rank.eq.PMM_HOST) THEN
 459 |             PRINT*, "  -> Table for ", trim(mediumtype) ," model readed"
 460 |           ENDIF
 461 | 
 462 |         ELSEIF (mediumtype.eq.'GRAY') THEN
 463 |           is_nkabs = 1
 464 |         ELSEIF (mediumtype.eq.'WSGG') THEN
 465 |           is_nkabs = is_ngg
 466 |         ELSE
 467 |           is_nkabs = Nq_kabs
 468 |         ENDIF
 469 | 
 470 | !       print*, " is_ncells    : ", is_ncells
 471 | !       print*, " is_nfacesmax : ", is_nfacesmax
 472 | !       print*, " is_nallbandes: ", is_nallbandes
 473 | !       print*, " is_nbandes   : ", is_nbandes
 474 | 
 475 |       END SUBROUTINE read_data_slave