band_integ.F [SRC] [CPP] [JOB] [SCAN]
SOURCES / SCHEMESSEQCODE/SCHEMES [=]



   1 | include(dom.inc)
   2 | 
   3 |       SUBROUTINE BAND_INTEG(wkabs, kabs, kscat, Lb, Lo,                 &
   4 |      &                      WVNB_SI, DWVNB_SI,                          &
   5 |      &                      Gtot, Lbtot,  Htot, Q_rtot)
   6 | 
   7 |         USE mod_pmm
   8 |         USE mod_slave
   9 |         USE mod_inout
  10 | 
  11 |         IMPLICIT NONE
  12 | 
  13 |         include 'dom_constants.h'
  14 |         include 'pmm_constants.h'
  15 | 
  16 | !       IN
  17 |         DOM_REAL          :: Gmax, Gmin, Smax, Smin
  18 |         DOM_REAL          :: WVNB_SI, DWVNB_SI
  19 |         DOM_REAL,DIMENSION(is_nkabs)          :: wkabs
  20 |         DOM_REAL,DIMENSION(is_nkabs,is_ncells):: kabs
  21 | 
  22 |         DOM_REAL,DIMENSION(is_ncells)             :: Lb, kscat
  23 |         DOM_REAL,ALLOCATABLE, DIMENSION(:)        :: WSGG_W_cell
  24 |         DOM_REAL,ALLOCATABLE, DIMENSION(:)        :: WSGG_W_face
  25 |         DOM_REAL,DIMENSION(is_nbfaces)            :: Lo
  26 | 
  27 | !       OUT
  28 |         DOM_REAL,DIMENSION(3,is_ncells)          :: Q_rtot
  29 |         DOM_REAL,DIMENSION(is_ncells)            :: Gtot, Lbtot
  30 |         DOM_REAL,DIMENSION(is_nbfaces)           :: Htot
  31 | 
  32 | !       LOCAL
  33 |         DOM_INT           :: iquad, n_iter, i, j, maxiter, ibnd
  34 |         DOM_INT           :: mloc(1)
  35 |         DOM_REAL          :: error
  36 | 
  37 |         DOM_REAL,DIMENSION(is_ncells)              :: Gi, G
  38 |         DOM_REAL,DIMENSION(is_nfacesmax,is_ncells) :: Li
  39 |         DOM_REAL,DIMENSION(is_nbfaces)             :: H
  40 |         DOM_REAL,DIMENSION(3,is_ncells)            :: Qr
  41 | 
  42 | !       print*, " (",pmm_rank,") Doing band integration"
  43 | 
  44 | !       --------------------------!
  45 | !       Integrate the narrow band !
  46 | !       --------------------------!
  47 | 
  48 |         DO iquad=1,is_nkabs
  49 | 
  50 | !         --------------------------------------------------!
  51 | !         WSGG: Le traitement de chaque gaz se fait sur une !
  52 | !               fraction du corps noir A*Lb (avec sum(A)=1) !
  53 | !         --------------------------------------------------!
  54 |           IF (trim(mediumtype).eq.'WSGG') THEN
  55 | 
  56 |             IF (.not.ALLOCATED(WSGG_W_cell))                            &
  57 |      &          ALLOCATE(WSGG_W_cell(is_ncells))
  58 |             IF (.not.ALLOCATED(WSGG_W_face))                            &
  59 |      &          ALLOCATE(WSGG_W_face(is_nbfaces))
  60 | 
  61 |             CALL GATHER(s_WSGG_W(iquad,:), WSGG_W_cell, 1)
  62 |             Lb(:) = WSGG_W_cell(:) * Lb(:)
  63 | 
  64 |             CALL GATHER_FACES(s_WSGG_W(iquad,:), WSGG_W_face, 1)
  65 |             Lo(:) = WSGG_W_face(:) * Lo(:)
  66 | 
  67 |           ENDIF
  68 | 
  69 | !         -----------------------------------------------------!
  70 | !         Initialisation values before reflection subiteration !
  71 | !         -----------------------------------------------------!
  72 | 
  73 |           G  = 0.
  74 |           H  = 0.
  75 |           Li = 0.
  76 | 
  77 |           error   = 1.
  78 |           n_iter  = 0
  79 |           maxiter = 500
  80 | 
  81 |           DO WHILE ((error.gt.critconv).and.(n_iter.lt.maxiter))
  82 | 
  83 | !           -------------------------------------------!
  84 | !           Update values for reflection sub iteration !
  85 | !           -------------------------------------------!
  86 | 
  87 |             Gi = G
  88 | 
  89 | !           --------------------------------------------!
  90 | !           Update faces "in" lumminance for reflection !
  91 | !           --------------------------------------------!
  92 | 
  93 |             DO ibnd = 1,is_nbfaces
  94 | 
  95 |               j = is_bcell(ibnd)
  96 |               i = is_bface(ibnd)
  97 |               Li(i,j) = Lo(ibnd) + (1.-s_epsil(ibnd))*H(ibnd)/pi
  98 | 
  99 |             ENDDO
 100 | 
 101 | !           ---------------!
 102 | !           SPATIAL SCHEME !
 103 | !           ---------------!
 104 | 
 105 |             CALL SPATIAL_SCHEME(I_SCHEME, Lb, Gi, G, kabs(iquad,:),     &
 106 |      &                          kscat, Qr, Li, H, alpha)
 107 | 
 108 | !           ---------------------------------------!
 109 | !           Convergence test for reflexion problem !
 110 | !           ---------------------------------------!
 111 | 
 112 |             mloc  = MAXLOC(abs(G-Gi))
 113 |             IF ((n_iter.ne.0).and.((abs(Gi(mloc(1)))).ne.0.)) THEN
 114 |               error = (abs(G(mloc(1))-Gi(mloc(1))))/abs(Gi(mloc(1)))
 115 |             ELSE
 116 |               error = 1.
 117 |             ENDIF
 118 | 
 119 |             n_iter = n_iter + 1
 120 | 
 121 | !           IF (pmm_rank.eq.0) print*, "Nq=",iquad,"/",is_nkabs,"-",    &
 122 | !    &                         "n_iter=",n_iter,"- err=", error
 123 | 
 124 | !           IF (pmm_rank.eq.0) print*, "mloc=",mloc(1),"- G=",          &
 125 | !    &                         G(mloc(1)),"- Gi=",Gi(mloc(1))
 126 | 
 127 |           ENDDO
 128 | 
 129 | !         ----------------------------------------!
 130 | !         Sum over all slave directions and bands !
 131 | !         ----------------------------------------!
 132 | 
 133 |           G  = G  / pmm_n_p
 134 |           H  = H  / pmm_n_p
 135 |           Qr = Qr / pmm_n_p
 136 | 
 137 |           Gtot(:)  = Gtot(:)  + G(:)*kabs(iquad,:)*wkabs(iquad)*DWVNB_SI
 138 | 
 139 |           Lbtot(:) = Lbtot(:) + Lb(:)*4*pi*kabs(iquad,:)*wkabs(iquad)   &
 140 |      &               *DWVNB_SI
 141 | 
 142 |           Htot(:)  = Htot(:)  + H(:)*wkabs(iquad)*DWVNB_SI
 143 | 
 144 |           Q_rtot(1,:) = Q_rtot(1,:)+Qr(1,:)*wkabs(iquad)*DWVNB_SI
 145 |           Q_rtot(2,:) = Q_rtot(2,:)+Qr(2,:)*wkabs(iquad)*DWVNB_SI
 146 |           Q_rtot(3,:) = Q_rtot(3,:)+Qr(3,:)*wkabs(iquad)*DWVNB_SI
 147 | 
 148 |         ENDDO
 149 | 
 150 |       END SUBROUTINE BAND_INTEG


band_integ.F could be called by:
fulldomasium.f90 [SEQCODE/FULLDOMASIUM] - 129 - 255
Makefile [SEQCODE] - 89
Makefile [SOURCES] - 148
prissma.F [SEQCODE/MAIN] - 218 - 243 - 268 - 311
slave.F [SOURCES/MAIN/SLAVE] - 296 - 408