fsck_case.F [SRC] [CPP] [JOB] [SCAN]
SOURCES / MODELSEQCODE/MODEL [=]



   1 | include(dom.inc)
   2 | 
   3 |       SUBROUTINE FSCK_CASE(all_k_abs, w, celldata, nelmts, all_WVNB,    &
   4 |      &                     all_DWVNB, ngbands,                          &
   5 |      &                     nallbandes, nkabs, data_ref, WSGG_W,         &
   6 |      &                     ieltd, ieltf, WSGG_Wb, Tf, nbfaces)
   7 | 
   8 |       USE mod_inout
   9 |       USE mod_pmm
  10 | #ifdef USEPALM
  11 |       USE palmlib
  12 | #endif
  13 | 
  14 |       IMPLICIT NONE
  15 | 
  16 |       include 'dom_constants.h'
  17 | 
  18 | !     IN
  19 |       DOM_INT                          :: nallbandes
  20 |       DOM_INT                          :: nbfaces, ibnd
  21 |       DOM_INT                          :: nkabs, ieltd, ieltf
  22 |       DOM_INT                          :: nelmts, ngbands
  23 |       DOM_REAL,DIMENSION(nallbandes)   :: all_WVNB,all_DWVNB
  24 |       DOM_REAL,DIMENSION(8,nelmts)     :: celldata
  25 |       DOM_REAL,DIMENSION(8)            :: data_ref
  26 |       DOM_REAL, DIMENSION(nbfaces)     :: Tf
  27 | 
  28 | !     OUT
  29 |       DOM_REAL,DIMENSION(nkabs)        :: w
  30 |       DOM_REAL,DIMENSION(nkabs,nelmts) :: all_k_abs
  31 |       DOM_REAL,DIMENSION(nkabs,nelmts) :: WSGG_W
  32 |       DOM_REAL,DIMENSION(nkabs,nbfaces):: WSGG_Wb
  33 | 
  34 | !     LOCAL
  35 |       DOM_REAL,DIMENSION(nkabs,nelmts) :: local_all_k_abs, local_WSGG_W
  36 |       DOM_REAL,DIMENSION(ngbands,2)    :: gasdata
  37 |       DOM_REAL                         :: FSK_SOOT, K_SOOT 
  38 |       DOM_REAL,DIMENSION(nkabs)        :: k_absmel
  39 |       DOM_REAL,DIMENSION(ngbands)      :: F, F_ref
  40 |       DOM_REAL                         :: blae, planck 
  41 |       DOM_REAL                         :: WVNB,DWVNB,WVNB_SI,DWVNB_SI
  42 |       DOM_INT                          :: ielt, i, ierr, j
  43 |       DOM_INT                          :: i_bande, n_cl
  44 |       DOM_INT                          :: ICO,ICO2,IH2O
  45 |       LOGICAL                          :: LICO,LICO2,LIH2O
  46 | 
  47 |       DOM_REAL,DIMENSION(ngbands,2)    :: gasdata_ref
  48 |       DOM_REAL,DIMENSION(nkabs)        :: k_ref, gdek, fdek, fdek_ref
  49 |       DOM_REAL                         :: gdek_i, fdek_i, Tp
  50 | 
  51 | !     --------------------------------------------!
  52 | !     STEP 1 : Calculation of the reference state !
  53 | !              k_ref and fdek_ref                 !
  54 | !     --------------------------------------------!
  55 |   
  56 |       F           = 0.
  57 |       gasdata_ref = 0.
  58 |       fdek_ref    = 0.
  59 | 
  60 |       Tp = s_Tp
  61 | 
  62 |       DO i_bande=1,ngbands
  63 |         WVNB    = all_WVNB(i_bande)
  64 |         DWVNB   = all_DWVNB(i_bande)
  65 |         WVNB_SI = 100.*WVNB
  66 |         DWVNB_SI= 100.*DWVNB
  67 | 
  68 |         IF (WVNB.le.9300.0) THEN
  69 |           CALL FINDI(LICO,LICO2,LIH2O,ICO,ICO2,IH2O,WVNB,DWVNB)
  70 | 
  71 |           CALL KBARANDPHI(data_ref(:),LICO,LICO2,LIH2O,ICO,             &
  72 |      &                    ICO2,IH2O,                                    &
  73 |      &                    gasdata_ref(i_bande,1:2), nallbandes)
  74 |         ENDIF
  75 | 
  76 |         IF (s_Tp.eq.0) Tp = data_ref(1)
  77 |         F(i_bande) = blae(WVNB_SI, Tp)*DWVNB_SI 
  78 | 
  79 |       ENDDO
  80 | 
  81 |       F     = F / SUM (F)
  82 |       F_ref = F
  83 | 
  84 |       CALL k_distributeur(F, ngbands, gasdata_ref, nkabs, k_ref,w)
  85 | 
  86 |       DO j = 1, nkabs
  87 |         DO i_bande=1,ngbands
  88 | 
  89 |           CALL pdf(gasdata_ref(i_bande,2), gasdata_ref(i_bande,1),      &
  90 |      &             k_ref(j),fdek_i)
  91 | 
  92 |           fdek_ref(j) = fdek_ref(j) + F(i_bande)*fdek_i
  93 | 
  94 |         ENDDO
  95 |       ENDDO
  96 | 
  97 |       IF (pmm_rank.eq.0) THEN
  98 |         PRINT*, "      DATA_REF : T    = ",data_ref(1)
  99 |         PRINT*, "                 P    = ",data_ref(2)
 100 |         PRINT*, "                 XH2O = ",data_ref(3)
 101 |         PRINT*, "                 XCO2 = ", data_ref(4)
 102 |         PRINT*, "                 XCO  = ", data_ref(5)
 103 |         PRINT*
 104 | !       PRINT*, "K_ref    :", k_ref
 105 | !       PRINT*, "fdek_ref :", fdek_ref
 106 |       ENDIF
 107 | 
 108 | !     ----------------------------------------------------------!
 109 | !     Calculation of the absorption coefficient over the domain !
 110 | !     ----------------------------------------------------------!
 111 | 
 112 |       local_all_k_abs = 0.
 113 |       all_k_abs       = 0.
 114 |       local_WSGG_W    = 0.
 115 |       WSGG_W          = 0.
 116 | 
 117 | !     ---------------------------------------------!
 118 | !     Non-homogeneous system or homogeneous system !
 119 | !     ---------------------------------------------!
 120 |       IF (homosyst.eq.'NO') THEN
 121 |         n_cl=ieltf
 122 |       ELSEIF (homosyst.eq.'YES') THEN
 123 |         n_cl=ieltd
 124 |       ENDIF
 125 | 
 126 |       DO ielt=ieltd,n_cl
 127 | 
 128 |         k_absmel = 0.
 129 |         FSK_SOOT = 0.
 130 |         gasdata  = 0.
 131 |         F        = 0.
 132 | 
 133 | !       ------------------------------------!
 134 | !       Setting spectral data for each band !
 135 | !       ------------------------------------!
 136 | 
 137 |         DO i_bande=1,ngbands
 138 | 
 139 |           WVNB    = all_WVNB(i_bande)
 140 |           DWVNB   = all_DWVNB(i_bande)
 141 |           WVNB_SI = 100.*WVNB
 142 |           DWVNB_SI= 100.*DWVNB
 143 | 
 144 | !         ----------------------------------------!
 145 | !         Spectral index lecture for each species !
 146 | !         ----------------------------------------!
 147 |           IF (WVNB.le.9300.0) THEN
 148 | 
 149 |             CALL FINDI(LICO,LICO2,LIH2O,ICO,ICO2,IH2O,WVNB,DWVNB)
 150 | 
 151 |             CALL KBARANDPHI(celldata(:,ielt),LICO,LICO2,LIH2O,ICO,      &
 152 |      &                      ICO2,IH2O,                                  &
 153 |      &                      gasdata(i_bande,1:2), nallbandes)
 154 | 
 155 |           ENDIF
 156 | 
 157 | !         -------------------------------------!
 158 | !         Band groupment multiplicative factor !
 159 | !         -------------------------------------!
 160 | 
 161 |           IF (s_Tp.eq.0) Tp = celldata(1,ielt)
 162 |           F(i_bande) = blae(WVNB_SI,Tp)*DWVNB_SI 
 163 | 
 164 |           K_SOOT     = 5.5*celldata(8,ielt)*WVNB_SI
 165 |           FSK_SOOT   = FSK_SOOT + F(i_bande)*K_SOOT
 166 |  
 167 |         ENDDO
 168 | 
 169 |         FSK_SOOT = FSK_SOOT / SUM(F)
 170 |         F        = F        / SUM(F)
 171 | 
 172 | !       --------------------------------------!
 173 | !       STEP 2 : Calculate g(T,phi_ref,k_ref) !
 174 | !                and f(T,phi_ref,k_ref)       !
 175 | !       --------------------------------------!
 176 | 
 177 |         gdek = 0.
 178 |         fdek = 0.
 179 | 
 180 |         DO j = 1, nkabs
 181 |           DO i_bande=1,ngbands
 182 | 
 183 |             CALL cdss(gasdata_ref(i_bande,2), gasdata_ref(i_bande,1),   &
 184 |      &                k_ref(j), gdek_i)
 185 | 
 186 |             CALL pdf(gasdata_ref(i_bande,2), gasdata_ref(i_bande:,1),   &
 187 |      &               k_ref(j), fdek_i)
 188 | 
 189 |             gdek(j) = gdek(j) + F_ref(i_bande)*gdek_i
 190 |             fdek(j) = fdek(j) + F(i_bande)*fdek_i
 191 | 
 192 |           ENDDO
 193 |         ENDDO
 194 | 
 195 | !         --------------------------------------------------------------!
 196 | !         STEP 3 : g(T_ref,phi_ref,k) = g(T_ref,phi,k*) => Correlated k !
 197 | !                  Invert g in the RHS to k* (k_absmel)                 !
 198 | !         --------------------------------------------------------------!
 199 | 
 200 |         DO j = 1, nkabs
 201 | 
 202 |           CALL COFG (F_ref, ngbands, gasdata(:,2), gasdata(:,1),gdek(j),&
 203 |      &               gdek(nkabs), k_absmel(j))
 204 | 
 205 |         ENDDO
 206 | 
 207 |         local_all_k_abs(:,ielt) = k_absmel + FSK_SOOT
 208 | 
 209 | !       ----------------------------------------------------------------!
 210 | !       STEP 4 : Calculation of the weight function                     !
 211 | !                a(T,T_ref,g_ref)= fdek(T,phi_ref)/fdek_(T_ref,phi_ref) !
 212 | !       ----------------------------------------------------------------!
 213 | 
 214 |         DO i = 1, nkabs
 215 |           IF(fdek_ref(i).ne.0) THEN
 216 |             local_WSGG_W(i,ielt) = fdek(i)/fdek_ref(i)
 217 |           ELSE
 218 |             local_WSGG_W(i,ielt) = 1.
 219 |           ENDIF
 220 |         ENDDO
 221 | 
 222 |         IF ((MOD(ielt,100).eq.0).and.(pmm_rank.eq.0)) THEN
 223 |           print*, "      >> Node:",ielt-ieltd,"/",n_cl-ieltd
 224 |         ENDIF
 225 | 
 226 |       ENDDO
 227 | 
 228 |       IF (homosyst.eq.'YES') THEN
 229 |         DO i=ieltd+1,ieltf
 230 |           local_all_k_abs(:,i) = local_all_k_abs(:,ieltd)
 231 |           local_WSGG_W(:,ielt) = local_WSGG_W(:,ieltd)
 232 |         ENDDO
 233 |       ENDIF
 234 | 
 235 | !     ------------------------------------------------------------------!
 236 | !     STEP 5 : Calculation of the weight function at walls              !
 237 | !              a(Tw,T_ref,g_ref)= fdek(Tw,phi_ref)/fdek_(T_ref,phi_ref) !
 238 | !     ------------------------------------------------------------------!
 239 | 
 240 |       WSGG_Wb = 0.
 241 | 
 242 |       DO ibnd=1,nbfaces
 243 | 
 244 |         fdek = 0.
 245 | 
 246 |         DO i_bande=1,ngbands
 247 |           DWVNB   = all_DWVNB(i_bande)
 248 |           DWVNB_SI= 100.*DWVNB
 249 | 
 250 |           IF(s_TP.eq.0) Tp = Tf(ibnd)
 251 |           F(i_bande) = blae(WVNB_SI,Tp)*DWVNB_SI 
 252 | 
 253 |         ENDDO
 254 | 
 255 |         F = F / SUM (F)
 256 | 
 257 |         DO j = 1, nkabs
 258 |           DO i_bande=1,ngbands
 259 | 
 260 |             CALL pdf(gasdata_ref(i_bande,2), gasdata_ref(i_bande:,1),   &
 261 |      &               k_ref(j),fdek_i)
 262 | 
 263 |             fdek(j) = fdek(j) + F(i_bande)*fdek_i
 264 | 
 265 |           ENDDO
 266 | 
 267 |           IF(fdek_ref(j).ne.0) THEN
 268 |             WSGG_Wb(j,ibnd) = fdek(j)/fdek_ref(j)
 269 |           ELSE
 270 |             WSGG_Wb(j,ibnd) = 1.
 271 |           ENDIF          
 272 | 
 273 |         ENDDO
 274 |       ENDDO
 275 | 
 276 | !     ------------------------------------------------!
 277 | !     sending all_k_abs....change to a pmm subroutine !
 278 | !     ------------------------------------------------!
 279 | 
 280 |        CALL MPI_ALLREDUCE(local_all_k_abs, all_k_abs, nkabs*nelmts,     &
 281 |      &                    MPI_DOUBLE_PRECISION, MPI_SUM, COMM_PARA ,    &
 282 |      &                    ierr)
 283 | 
 284 |        CALL MPI_ALLREDUCE(local_WSGG_W, WSGG_W, nkabs*nelmts,           &
 285 |      &                    MPI_DOUBLE_PRECISION, MPI_SUM, COMM_PARA ,    &
 286 |      &                    ierr)
 287 | 
 288 |       IF (homosyst.eq.'YES') THEN
 289 |         DO j = 1, nkabs
 290 |           all_k_abs(j,:) = k_ref(j) 
 291 |         ENDDO
 292 |         WSGG_W = 1.d0
 293 |       ENDIF
 294 | 
 295 |       END SUBROUTINE FSCK_CASE


fsck_case.F could be called by:
deri_kappa.F [SOURCES/SCHEMES] - 113
Makefile [SOURCES] - 154
Makefile [TOOLS/TABFSK] - 69
slave.F [SOURCES/MAIN/SLAVE] - 276
tabfsk.F [TOOLS/TABFSK/SRC] - 151