trajet.f [SRC] [CPP] [JOB] [SCAN]
srcresultats/00benedicte/.xvpics [=]
resultats/pt1_complet/.xvpics [=]
archivage/code2000X_testCG [=]
resultats/pt1_complet [=]



   1 |       Subroutine trajet(sens, boolener, profssmaille, 
   2 |      & boolssmaille,boolinterieur)
   3 |       IMPLICIT NONE
   4 | c
   5 | c&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   6 | c suivi de rayon pour "cecile.f"
   7 | c&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   8 | c
   9 | c.......................................................................
  10 | c
  11 |       INCLUDE 'cecile.inc'
  12 | 
  13 |       include 'propradia.inc'
  14 |       include 'radiatif.inc'
  15 | 
  16 |       include 'entre.inc'
  17 | 
  18 |       integer hete
  19 |       logical boolener, profssmaille, debug,boolssmaille,boolinterieur
  20 | 
  21 | c profssmaille est faux ==> pas de profil ss maille
  22 | c.......................................................................
  23 | c
  24 | c debut du rayon = maille in
  25 | c fin du rayon   = condition d'arret = paroi noire
  26 | c depot d'energie sur les iin traverses
  27 | c
  28 | c sens : si sens=1 on se propage vers les rayons croissants
  29 | c        si sens=2 on commence par se propager vers les rayons decroissants
  30 | c w : poids pour les psi(in,iin) de iin=0 a n+1
  31 | c b : poids energetiques pour les psi(in,iin)
  32 | c
  33 | c b_dt : poids pour les dpsi6dt(in,iin,itmp1)
  34 | c w_dk : poids pour les dpsidk(in,iin,itmp1) de iin=0 a n+1 et pour tous 
  35 | c        les itmp1 traverses
  36 | c
  37 | c iin_entree : indice de la premiere maille a traverser lorsque l'on
  38 | c              va vers les rayons croissants ... si "sens=1" alors
  39 | c              in_entree=in+1 ... si "sens=2" alors iin_entree=iin_min+1
  40 | c
  41 | c........................................................................
  42 | c MISE EN GARDE :
  43 | c si desprofils sous maille sont defini par un fonction f(x)
  44 | c cela devient dangereux si vous utiliser rsup
  45 | c il faut en tenir compte !!!!!!!    (retrancher rsup)
  46 | c 
  47 | c Le calcul des sensibilites en parcourant itmp1, peut etre reduit
  48 | c en termes de boucles...car on n'est pas sensible aux mailles non
  49 | c traversees: c'est un gain important en terme de temps de calcul
  50 | c........................................................................
  51 | 
  52 |       INTEGER sens
  53 |       double precision rayon, profblack,proftemp_index.f" HREF="../src/proftemp_index.f.html">proftemp_index, proftemp
  54 |       double precision temperat
  55 |       double precision bi, bj, cg
  56 |       DOUBLE PRECISION w
  57 |       DOUBLE PRECISION w_dk (n_mx)
  58 |       DOUBLE PRECISION bi_dt (n_mx)
  59 |       DOUBLE PRECISION bj_dt (n_mx)
  60 |       double precision epocg(ngaz_mx)
  61 |       double precision phicg(ngaz_mx), cor(ngaz_mx), correct, cg_mix
  62 |       double precision distance, wcg
  63 |       INTEGER iin_entree,a,b,mmcte, iz
  64 | c
  65 | c.......................................................................
  66 | c
  67 |       DOUBLE PRECISION tmp1,tmp2,tmp3,tmp4,tmp5,tmp6
  68 |       INTEGER itmp1,itmp2,itmp3,itmp4,itmp5
  69 |       logical choixhet, choixplus
  70 | c
  71 | c......................pour version CG..................................
  72 | c
  73 |       ! variables interieures a la future version cd curtis godson
  74 |       integer test1, test2
  75 |       double precision tmp7, tmp8, tmp9
  76 |       DOUBLE PRECISION tdphi_j,tdphi_i,tphi,tphi_i,tphi_j,tk_i,tk_j
  77 |       DOUBLE PRECISION te,tb,ta,tdb_i,tdb_j,tda_i,tda_j,td2phi
  78 |       DOUBLE PRECISION tam12,tap12,tam32
  79 |       double precision tGa_i(ngaz_mx),tGa_j(ngaz_mx),tdGa_ij(ngaz_mx)
  80 |       DOUBLE PRECISION tGb_i(ngaz_mx),tGb_j(ngaz_mx),tdGb_ij(ngaz_mx)
  81 |       double precision tdGa_ji,toto,tGa, tGb, tGc,tGd
  82 |       double precision correction  !rajouter cor(ngaz_mx) aussi
  83 | c
  84 | c.......................................................................
  85 | c
  86 | c&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  87 | c
  88 | c.......................................................................
  89 | c mise a zero des poids etc...
  90 | c....................................................................... 
  91 |       choixhet = (hetero .le. 2)  !sep ou cg sont a activer 
  92 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!      choixplus = (hetero .le. 0) !cg2
  93 |       debug=.False.
  94 |       ngaz = 3
  95 |       do igaz=1,ngaz
  96 |          cor(igaz)=1.d+0
  97 |       enddo
  98 |       correct = 1.d+0
  99 |       distance = 0.d+0
 100 |       mmcte = 110
 101 | c     rien a faire
 102 |       do iin=1,n
 103 |          w_dk (iin)= 0.d+0
 104 |          bi_dt (iin)=0.d+0
 105 |          bj_dt (iin)=0.d+0
 106 |       enddo
 107 |       iin = in 
 108 | c.......................................................................
 109 | c pour la maille d'emission in: calcul des proprietes
 110 | c.......................................................................
 111 | c*****profil sous maille: sigma_1 deja tire
 112 |       !sigma_1 = 0.d+0
 113 |       if ((in.gt.0).and.(in.lt.(n+1))) then
 114 |          !volume (origine la sortie) + modif amaury 20 janv 2000
 115 |          if (sens.eq.2) then
 116 |              !sigma1 decroissant contre paroi int de la couronne
 117 |              rayon = dsqrt(delta**2 + ((long(in-1)/f)+(sigma_1/f))**2)
 118 |             else
 119 |              !sigma1 croissant contre paroi ext de la couronne
 120 |              rayon = dsqrt(delta**2 + ((long(in)/f)-(sigma_1/f))**2)  
 121 |          endif
 122 | 
 123 |          else
 124 |          ! paroi
 125 |          sigma_1 = 0.d+0
 126 |          rayon=r(in)
 127 |       endif
 128 |       !------------CURTIS GODSON
 129 |       if (choixhet) then
 130 |       distance = distance + sigma_1
 131 |          do igaz=1,ngaz
 132 |           kbarphi_s(igaz) = kbarphi_s(igaz) + 
 133 |      &    kgbar(igaz,in)* phig(igaz,in) *sigma_1
 134 |           !if ((in.eq.25)) then 
 135 |           !   print *,kbar_s(igaz),kgbar(igaz,in),sigma_1
 136 |           !endif
 137 |           kbar_s(igaz) = kbar_s(igaz) + kgbar(igaz,in)*sigma_1
 138 |           !A cette etape on a pas besoin de phicg
 139 |           !et le denominateur est souvent nul
 140 |           !phicg(igaz) = (kbarphi_s(igaz) / kbar_s(igaz)) 
 141 |           epocg(igaz) = kbar_s(igaz) !ATTENTION / distance
 142 | !          if (kbar_s(igaz).lt.1.d-10) phicg(igaz)=phig(igaz,in)
 143 | !          if (distance .eq. 0.d+0)  epocg(igaz) = kgbar(igaz,in)
 144 |           !print *,igaz,kbar_s(igaz), phig(igaz,in), phicg(igaz)
 145 | !          cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz)
 146 | !     & ,kbar_s(igaz),kgbar(igaz,in),sigma_1 !)
 147 | !     & ,kgbar(igaz,iin),0.d+0,phig(igaz,iin))
 148 |           !!print *,'EMISSION:  ', igaz, phicg(igaz),kbar_s(igaz), in
 149 |           !!print *,'', cor(igaz)
 150 |          enddo
 151 | !      if (choixplus) correct = cg_mix(epocg,phicg)
 152 |       endif
 153 |       !-------------------------
 154 | 
 155 | c*****fonction: partie geom--> rien
 156 | c*****fonction: partie energetique
 157 |       temperat= proftemp_index(in,rayon,boolinterieur)
 158 |       if (boolssmaille) temperat = proftemp(rayon, rsup)
 159 |       !print *, in, rayon-rsup, temperat
 160 |       !read *
 161 |       !call black(eta(ibande)*1.d+2, temp(in),emi)
 162 |       call black(eta(ibande)*1.d+2, temperat,emi)
 163 |       bi = (emi)/pi
 164 |       
 165 | c pour papier milieux epais: mcep
 166 | c bi = lblack(rayon)
 167 |       if (profssmaille) then
 168 |       call error(boolssmaille)
 169 |       bi = profblack(r(0), r(n+1), rayon, rsup)
 170 |       endif
 171 |       if (.not. boolener) then
 172 |            bi = 1.d+0 
 173 |            bj= 0.d+0
 174 |       endif
 175 | c*****pas d'attenuation ???
 176 | 
 177 | 
 178 | c
 179 | c.......................................................................
 180 | c
 181 |       IF (sens.EQ.2) THEN
 182 | c
 183 | c.......................................................................
 184 | c si sens=2
 185 | c on fait tous les echanges avec les mailles plus petites
 186 | c (jusqu'a iin_min)
 187 | c si iin_min=0 c'est qu'on a rencontre la paroi interne, on fait l'echange
 188 | c    avec cette paroi et c'est fini
 189 | c si iin_min>0 on repart ensuite vers les rayons croissants jusqu'a la
 190 | c    paroi externe (pour ca on retrouve l'algorithme de "sens=1") 
 191 | c.......................................................................
 192 | c
 193 |       DO iin=in-1,iin_min+1,-1
 194 | 
 195 | c****** profil sous maille iin: reception
 196 | c -----{tirage de sigma_2 dans la maille iin}
 197 | c
 198 |         call rand_uniforme(tmp2)
 199 |         sigma_2 =
 200 |      &    - dlog(1.D+0
 201 |      &         -tmp2*(1.D+0-dexp(-k(iin)*(long(iin)-long(iin-1)))))
 202 |      &    /k(iin)
 203 |         if (k(iin).eq. 0.d+0) sigma_2 = 0.d+0
 204 |         !volume (origine a l'entree)
 205 | cc        rayon = dsqrt(delta**2 + ((long(iin-1)/f)+(sigma_2/f))**2)
 206 |         rayon = dsqrt(delta**2 + ((long(iin)/f)-(sigma_2/f))**2)
 207 | !        print *, 'iin,rayon:  ',iin , rayon
 208 | !        read *
 209 |       !------------CURTIS GODSON
 210 |       if (choixhet) then
 211 |       tmp6 = distance + sigma_2
 212 |       do igaz=1,ngaz
 213 |       tmp4 = kbarphi_s(igaz) + 
 214 |      & kgbar(igaz,iin)* phig(igaz,iin) *sigma_2
 215 |        !if ((in.eq.25).and.(iin.eq.123)) then 
 216 |        !      print *,'**: ',kbar_s(igaz) + kgbar(igaz,iin)*sigma_2,
 217 | c     !& kbar_s(igaz),kgbar(igaz,in),sigma_2
 218 |       !    endif
 219 |       tmp5 = kbar_s(igaz) + kgbar(igaz,iin)*sigma_2
 220 | 
 221 |       phicg(igaz) = tmp4/ tmp5
 222 |       epocg(igaz) = tmp5 ! ATTENTION/ tmp6
 223 |       !if (tmp5.lt.1.d-10) phicg(igaz)=phig(igaz,in)
 224 |       !if (tmp6 .eq. 0.d+0)  epocg(igaz) = kgbar(igaz,in)
 225 |       !print *,igaz,tmp5, phig(igaz,in), phicg(igaz)
 226 | !      cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz),
 227 | !     & tmp5,
 228 | !     & kgbar(igaz,in),sigma_1   !)
 229 | !     & ,kgbar(igaz,iin),sigma_2,phig(igaz,iin))
 230 |       !cor(igaz)=1
 231 |        !!print *, 'TRAV DEC',igaz, phicg(igaz),tmp5,in,iin
 232 |         !!print *,'', cor(igaz)
 233 |       enddo
 234 | 
 235 |       include 'curtis.inc'
 236 |       correct = wcg
 237 |       endif
 238 |       !-------------------------        
 239 |        
 240 | c****** calcul de la fonction psi(integrale) et ses derivees 
 241 | c -----{increment des poids optico-geom}
 242 |         tmp1=(long(iin)-long(iin-1))
 243 | !        w= cor(1)*cor(2)*cor(3)*correct*
 244 |         w= correct*
 245 |      &     poids*(1.D+0-dexp(-k(iin)*tmp1))
 246 | 
 247 | c -----{increment des poids energetique: pas de cumul}
 248 |         temperat= proftemp_index(iin,rayon,boolinterieur)
 249 |         if (boolssmaille) temperat = proftemp(rayon, rsup)
 250 |         !print *, iin, rayon-rsup, temperat
 251 |         !read *
 252 |         call black (eta(ibande)*1.d+2, temperat,emj)
 253 |         bj = (emj)/pi
 254 | 
 255 | c pour papier milieux epais: mcep
 256 | c bi = lblack(rayon)
 257 |         if (profssmaille) then 
 258 |         call error(boolssmaille)
 259 |         bj = profblack(r(0), r(n+1), rayon, rsup)
 260 |         endif
 261 | 
 262 | c -----{calcul de psi...}
 263 |         if (debug.and.(in.eq.mmcte)) then
 264 |         print *, 'l1'
 265 |         print *, w, dexp(-k(iin)*tmp1), k(iin),poids
 266 |         endif
 267 |         if (.not. boolener) then
 268 |            bi = 1.d+0 
 269 |            bj= 0.d+0
 270 |         endif
 271 |         call trajet_fonc(w,bi,bj)
 272 |      
 273 |         DO itmp1=in,iin,-1
 274 | cccccccccccccccccccccccccccccccccccccccccccccc         DO itmp1=1,n
 275 |           ! increment des poids optico-geom
 276 | !          w_dk(itmp1)=cor(1)*cor(2)*cor(3)*correct*
 277 |           w_dk(itmp1)= correct* 
 278 |      &       poids*dpdksp(itmp1)*(1.D+0-dexp(-k(iin)*tmp1))
 279 | ccc debug
 280 |           if (dexp(-k(iin)*tmp1).eq.1.d+0) then
 281 |              w_dk(itmp1) = 0.d+0
 282 |           endif
 283 |           
 284 | c          if (itmp1.eq.in)then
 285 | c             print *,  sens, in, iin, w_dk(itmp1)
 286 | c          endif
 287 |           !! cas particulier de iin
 288 |           if (itmp1.eq.iin) then
 289 | !          w_dk(iin)=cor(1)*cor(2)*cor(3)*correct*
 290 |           w_dk(iin)=correct*
 291 |      &     poids*tmp1*dexp(-k(iin)*tmp1)
 292 |           endif
 293 | 
 294 |           ! increment poids energetique
 295 |           !!seule in et iin sont non nuls mais dans la boucle
 296 |           if (itmp1.eq.in) then
 297 |               !!temperat= proftemp_index(in,rayon)
 298 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 299 |               call black_dt (eta(ibande)*1.d+2, temperat,demi)
 300 | !            print *, in, iin, '  ', eta(ibande)*1.d+2, temperat,demi
 301 | !            read *
 302 |               bi_dt(itmp1)= (demi)/pi
 303 |               bj_dt(itmp1)= 0.d+0
 304 |               elseif (itmp1.eq.iin)  then
 305 |               !!temperat= proftemp_index(iin,rayon)
 306 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 307 |               call black_dt (eta(ibande)*1.d+2, temperat,demj)
 308 |               bj_dt(itmp1)= (demj)/pi
 309 |               bi_dt(itmp1)=0.d+0
 310 |               else
 311 |               bj_dt(itmp1)= 0.d+0
 312 |               bi_dt(itmp1)= 0.d+0
 313 |           endif
 314 | 
 315 | 
 316 |           ! calcul de dpsi...
 317 |           call trajet_sens(itmp1,w,bi,bj,
 318 |      & w_dk(itmp1),bi_dt(itmp1),bj_dt(itmp1))
 319 | 
 320 |         ENDDO
 321 |        
 322 | 
 323 | c
 324 | c****** attenuation dans la maille iin}
 325 | c
 326 |         tmp1=(long(iin)-long(iin-1))
 327 |         poids=poids*dexp(-k(iin)*tmp1)
 328 |         dpdksp(iin)=dpdksp(iin)-tmp1
 329 |       !------------CURTIS GODSON
 330 |       if (choixhet) then
 331 |       distance = distance + tmp1 
 332 |       do igaz=1,ngaz
 333 |         kbarphi_s(igaz) = kbarphi_s(igaz) + 
 334 |      &  kgbar(igaz,iin)* phig(igaz,iin) *tmp1
 335 |         kbar_s(igaz) = kbar_s(igaz) + kgbar(igaz,iin)*tmp1
 336 |         phicg(igaz) = (kbarphi_s(igaz) / kbar_s(igaz)) 
 337 |         epocg(igaz) = kbar_s(igaz) ! ATTENTION / distance
 338 | !        if (kbar_s(igaz).lt.1.d-10) phicg(igaz)=phig(igaz,in)
 339 | !        if (distance .eq. 0.d+0)  epocg(igaz) = kgbar(igaz,in)
 340 |         !print *,igaz,kbar_s(igaz), phig(igaz,in), phicg(igaz)
 341 | !        cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz)
 342 | !     & ,kbar_s(igaz),kgbar(igaz,in),sigma_1 !)
 343 | !     & ,kgbar(igaz,iin),sigma_2,phig(igaz,iin))
 344 |          !!print *, 'TRAV DEC tot',igaz, phicg(igaz),kbar_s(igaz),in,iin
 345 |           !!print *,'', cor(igaz)
 346 |         !cor(igaz)=1
 347 |         !!!!!!!!!!!print *, igaz,phicg(igaz),kbarphi_s(igaz), kbar_s(igaz)  
 348 |         !if(in.eq.3) print*, 'kbphi, kb', kbarphi_s(3), kbar_s(3) 
 349 |         !if(in.eq.3) print*, '..............'
 350 |         !if(in.eq.3) print*, 'in=', iin
 351 |         !if(in.eq.3) print*, '..............'
 352 |       enddo
 353 | 
 354 | !      if (choixplus) correct = cg_mix(epocg, phicg)
 355 |       endif
 356 |       !-------------------------        
 357 | c
 358 |       ENDDO
 359 | c
 360 | c ---{traitement particulier pour la maille iin_min= iin courant}
 361 | c
 362 |       IF (iin_min .EQ.0) THEN
 363 | 
 364 | c -----{paroi interne}
 365 | c****** profil sous maille iin: reception
 366 |          ! pas d'épaisseur
 367 |         iin = iin_min
 368 |         rayon = r(iin)
 369 |         rayon = r(0)
 370 |       !------------CURTIS GODSON
 371 |       if (choixhet) then
 372 |       !rien a faire
 373 |        do igaz=1,ngaz
 374 |           tmp4 = kbarphi_s(igaz)
 375 |           tmp5 = kbar_s(igaz)
 376 |           phicg(igaz) = tmp4 /tmp5
 377 |           epocg(igaz) = tmp5
 378 |        !kbarphi_s(igaz) = kbarphi_s(igaz) + 
 379 |        ! kgbar(igaz,in)* phig(igaz,in) *sigma_1
 380 |        ! kbar_s(igaz) = kbar_s(igaz) + kgbar(igaz,in)*sigma_1
 381 |        ! phicg(igaz) = (kbarphi_s(igaz) / kbar_s(igaz)) 
 382 | !      cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz),
 383 | !     & tmp5,
 384 | !     & kgbar(igaz,in),sigma_1   !)
 385 | !     & ,kgbar(igaz,iin),0.d+0,phig(igaz,iin))
 386 |        enddo
 387 |       !distance = distance +0
 388 |        include 'curtis.inc'
 389 |        correct = wcg
 390 |       endif
 391 |       !-------------------------
 392 | c****** calcul de la fonction psi(integrale) et ses derivees 
 393 | c------{increment poids optico-geome}
 394 |         !w=poids*cor(1)*cor(2)*cor(3)*correct
 395 |         w=poids*correct
 396 | c -----{increment des poids energetique: pas de cumul}
 397 |         temperat= proftemp_index(0,rayon,boolinterieur)
 398 |         if (boolssmaille) temperat = proftemp(rayon, rsup)
 399 |               !print *, 0, rayon-rsup, temperat
 400 |               !read *
 401 |         call black (eta(ibande)*1.d+2, temperat,emj)
 402 |         bj = (emj)/pi
 403 | 
 404 | c pour papier milieux epais: mcep
 405 | c bi = lblack(rayon)
 406 |         if (profssmaille) then
 407 |         call error(boolssmaille) 
 408 |         bj = profblack(r(0), r(n+1), rayon, rsup)
 409 |         endif
 410 | 
 411 | c -----{calcul de psi...}
 412 |         iin = 0
 413 |          if (debug.and.(in.eq.mmcte)) then
 414 |         print *,'l2'
 415 |         print *, w
 416 |         endif
 417 |         if (.not. boolener) then
 418 |            bi = 1.d+0 
 419 |            bj= 0.d+0
 420 |         endif
 421 |        call trajet_fonc(w,bi,bj)
 422 |        DO itmp1=in,iin_min,-1
 423 | ccccccccccccccccccccccccccccccccccccccccccccc        DO itmp1=1,n
 424 |           ! increment poids optico-geom
 425 | !          w_dk(itmp1)=cor(1)*cor(2)*cor(3)*correct*
 426 |           w_dk(itmp1)=correct*
 427 |      &       poids*dpdksp(itmp1)
 428 | 
 429 |           ! increment poids energetique
 430 |           !!seule in et iin sont non nuls mais dans la boucle
 431 |           if (itmp1.eq.in) then
 432 |               !!temperat= proftemp_index(in,rayon)
 433 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 434 |               call black_dt (eta(ibande)*1.d+2, temperat,demi)
 435 | !            print *, in, iin, '  ', eta(ibande)*1.d+2, temperat,demi
 436 | !            read *
 437 |               bi_dt(itmp1)= (demi)/pi
 438 |               bj_dt(itmp1)= 0.d+0
 439 |               elseif (itmp1.eq.iin)  then
 440 |               !!temperat= proftemp_index(iin,rayon)   
 441 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 442 |               call black_dt (eta(ibande)*1.d+2, temperat,demj)
 443 |               bj_dt(itmp1)= (demj)/pi
 444 |               bi_dt(itmp1)=0.d+0
 445 |               else
 446 |               bj_dt(itmp1)= 0.d+0
 447 |               bi_dt(itmp1)= 0.d+0
 448 |           endif
 449 |           
 450 | 
 451 |                   ! calcul de dpsi...
 452 |           call trajet_sens(itmp1,w,bi,bj,
 453 |      & w_dk(itmp1),bi_dt(itmp1),bj_dt(itmp1))
 454 | 
 455 |         ENDDO
 456 | c****** attenuation dans une paroi: non
 457 |         GOTO 10002
 458 | c
 459 |       ELSE
 460 |         iin = iin_min 
 461 | c****** profil sous maille iin: reception 
 462 | c -----{tirage de sigma_2 dans la maille iin_min}
 463 | c
 464 |         call rand_uniforme(tmp2)
 465 |         sigma_2=
 466 |      &    -dlog(1.D+0
 467 |      &         -tmp2*(1.D+0-dexp(-k(iin_min)*(2.D+0*long(iin_min)))))
 468 |      &    /k(iin_min)
 469 |         if (k(iin).eq. 0.d+0) sigma_2 = 0.d+0
 470 |         !sigma_2 = 0.d+0
 471 |          !volume (origine a l'entree)
 472 | cc        rayon = dsqrt(delta**2 + ((long(iin-1)/f)+(sigma_2/f))**2)
 473 |         rayon = dsqrt(delta**2 + ((long(iin_min)/f)
 474 |      & -(sigma_2/f))**2)
 475 |       !------------CURTIS GODSON
 476 |       if (choixhet) then
 477 |       tmp6 = distance + sigma_2
 478 |       do igaz=1,ngaz
 479 |       tmp4 = kbarphi_s(igaz) + 
 480 |      & kgbar(igaz,iin)* phig(igaz,iin) *sigma_2
 481 |       tmp5 = kbar_s(igaz) + kgbar(igaz,iin)*sigma_2
 482 | 
 483 |       phicg(igaz) = tmp4 / tmp5
 484 |       epocg(igaz) = tmp5 ! ATTENTION / tmp6
 485 |       !if (tmp5.lt.1.d-10) phicg(igaz)=phig(igaz,in)
 486 |       !if (tmp6 .eq. 0.d+0)  epocg(igaz) = kgbar(igaz,in)
 487 | !      cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz),
 488 | !     & tmp5,
 489 | !     & kgbar(igaz,in),sigma_1 !)
 490 | !     & ,kgbar(igaz,iin),sigma_2,phig(igaz,iin))
 491 |       !!print *, 'MIN VOL ',igaz, phicg(igaz),tmp5,in,iin
 492 |        !!print *,'', cor(igaz)
 493 |       !cor(igaz)=1
 494 |       enddo
 495 |       include 'curtis.inc'
 496 |       correct = wcg
 497 | 
 498 |       endif
 499 |       !-------------------------
 500 |        
 501 | c****** calcul de la fonction psi(integrale) et ses derivees 
 502 | c -----{increment du poids optico-geom}
 503 | c
 504 |         tmp1=(2.D+0*long(iin_min))
 505 | !        w=cor(1)*cor(2)*cor(3)*correct*
 506 |         w=correct*
 507 |      &     poids*(1.D+0-dexp(-k(iin_min)*tmp1))
 508 | 
 509 | c -----{increment poids energetique}
 510 |         temperat= proftemp_index(iin_min,rayon,boolinterieur)
 511 |         if (boolssmaille) temperat = proftemp(rayon, rsup)
 512 |               !print *, iin_min, rayon-rsup, temperat
 513 |               !read *
 514 |         call black(eta(ibande)*1.d+2, temperat,emj)
 515 |         bj = (emj)/pi
 516 | 
 517 | c pour papier milieux epais: mcep
 518 | c bi = lblack(rayon)
 519 |         if (profssmaille) then
 520 |         call error(boolssmaille)  
 521 |         bj = profblack(r(0), r(n+1), rayon, rsup)
 522 |         endif
 523 | 
 524 | c -----{calcul de psi...}
 525 |         iin = iin_min
 526 |          if (debug.and.(in.eq.mmcte)) then
 527 |         print *, 'l3'
 528 |         print *, w
 529 |         endif
 530 |         if (.not. boolener) then
 531 |            bi = 1.d+0 
 532 |            bj= 0.d+0
 533 |         endif
 534 |         call trajet_fonc(w,bi,bj)
 535 | 
 536 |         DO itmp1=in,iin_min,-1
 537 | ccccccccccccccccccccccccccccccccccccccccccccccc        DO itmp1=1,n 
 538 |            ! increment poids optico-geom
 539 | !          w_dk(itmp1)=cor(1)*cor(2)*cor(3)*correct*
 540 |           w_dk(itmp1)=correct*
 541 |      &       poids*dpdksp(itmp1)*(1.D+0-dexp(-k(iin_min)*tmp1))
 542 | ccc debug
 543 |           if (dexp(-k(iin_min)*tmp1).eq. 1.d+0) then
 544 |              w_dk(itmp1) = 0.d+0
 545 |           endif
 546 | ccc           if (itmp1.eq.in)then
 547 | ccc             print *,  sens, in, iin, w_dk(itmp1)
 548 | ccc          endif
 549 | 
 550 |            
 551 |           if (itmp1.eq.iin_min) then
 552 | !          w_dk(iin_min)=cor(1)*cor(2)*cor(3)*correct*
 553 |           w_dk(iin_min)=correct*
 554 |      &     poids*tmp1*dexp(-k(iin_min)*tmp1)
 555 |           endif
 556 |           
 557 |            !increment poids energetique
 558 |            !!seule in et iin sont non nuls mais dans la boucle
 559 |            if (itmp1.eq.in) then
 560 |               !!temperat= proftemp_index(in,rayon)
 561 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 562 |               call black_dt (eta(ibande)*1.d+2, temperat,demi)
 563 |               bi_dt(itmp1)= (demi)/pi
 564 |               bj_dt(itmp1)= 0.d+0
 565 |               elseif (itmp1.eq.iin)  then
 566 |               !!temperat= proftemp_index(iin,rayon)
 567 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 568 |               call black_dt (eta(ibande)*1.d+2, temperat,demj)
 569 |               bj_dt(itmp1)= (demj)/pi
 570 |               bi_dt(itmp1)=0.d+0
 571 |               else
 572 |               bj_dt(itmp1)= 0.d+0
 573 |               bi_dt(itmp1)= 0.d+0
 574 |            endif
 575 | 
 576 | 
 577 |            !calcul de dpsi...
 578 |           call trajet_sens(itmp1,w,bi,bj,
 579 |      & w_dk(itmp1),bi_dt(itmp1),bj_dt(itmp1))
 580 |         ENDDO
 581 | c
 582 | c****** attenuation dans la maille iin_min}
 583 | c
 584 |         tmp1=(2.D+0*long(iin_min))
 585 |         poids=poids*dexp(-k(iin_min)*tmp1)
 586 |         dpdksp(iin_min)=dpdksp(iin_min)-tmp1
 587 |       !------------CURTIS GODSON
 588 |       if (choixhet) then
 589 |       distance = distance + tmp1
 590 |       do igaz=1,ngaz
 591 |       kbarphi_s(igaz) = kbarphi_s(igaz) + 
 592 |      & kgbar(igaz,iin)* phig(igaz,iin) * tmp1
 593 |       kbar_s(igaz) = kbar_s(igaz) + kgbar(igaz,iin)* tmp1
 594 | 
 595 |       phicg(igaz) = (kbarphi_s(igaz) / kbar_s(igaz)) 
 596 |       epocg(igaz) = kbar_s(igaz) ! ATTENTION / distance
 597 | !      if (kbar_s(igaz).lt. 1.d-10) phicg(igaz)=phig(igaz,in)
 598 | !      if (distance .eq. 0.d+0)  epocg(igaz) = kgbar(igaz,in)
 599 | !      cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz),
 600 | !     & kbar_s(igaz),kgbar(igaz,in),sigma_1 !)
 601 | !     & ,kgbar(igaz,iin),sigma_2,phig(igaz,iin))
 602 |       !!print *, 'MIN VOL tot',igaz, phicg(igaz),kbar_s(igaz),in,iin
 603 |        !!print *,'', cor(igaz)
 604 |       !cor(igaz)=1
 605 |       enddo
 606 | 
 607 | !      if (choixplus) correct = cg_mix(epocg, phicg)
 608 |       endif
 609 |       !-------------------------
 610 | c
 611 |       iin_entree=iin_min+1
 612 |       ENDIF
 613 | c
 614 |       
 615 | 
 616 |               ELSE
 617 |       ! sens=1 des le depart
 618 |       iin_entree=in+1
 619 |       ENDIF
 620 |       
 621 | c.......................................................................
 622 | c si sens=1
 623 | c.......................................................................
 624 |       DO iin=iin_entree,n
 625 |         ! la condition ci-dessous elimine le calcul de psi(a,a) nul
 626 |         ! par definition.
 627 |         ! dans le cas general ca arrive tres rarement donc pas tres important
 628 |         IF (iin.NE.in) THEN
 629 | 
 630 | c****** profil sous maille iin: reception 
 631 | c -------{tirage de sigma_2 dans la maille iin}
 632 | c
 633 |           call rand_uniforme(tmp2)
 634 |           sigma_2=
 635 |      &    -dlog(1.D+0
 636 |      &         -tmp2*(1.D+0-dexp(-k(iin)*(long(iin)-long(iin-1)))))
 637 |      &    /k(iin)
 638 |         if (k(iin).eq. 0.d+0) sigma_2 = 0.d+0
 639 |         !sigma_2 = 0.d+0
 640 |            !volume (origine a l'entree)
 641 |         rayon = dsqrt(delta**2 + ((long(iin-1)/f)+(sigma_2/f))**2)
 642 |       !------------CURTIS GODSON
 643 |       if (choixhet) then
 644 |       tmp6 = distance + sigma_2
 645 |         do igaz=1,ngaz
 646 |           tmp4 = kbarphi_s(igaz) + 
 647 |      &    kgbar(igaz,iin)* phig(igaz,iin) *sigma_2
 648 | c          !if ((in.eq.25).and.(iin.eq.123)) then 
 649 | c          !   print *,'**: ',kbar_s(igaz) + kgbar(igaz,iin)*sigma_2,
 650 | c     !& kbar_s(igaz),kgbar(igaz,in),sigma_2
 651 | c     !     endif
 652 |           tmp5 = kbar_s(igaz) + kgbar(igaz,iin)*sigma_2
 653 | 
 654 |           phicg(igaz) = tmp4 / tmp5
 655 |           epocg(igaz) = tmp5 ! ATTENTION / tmp6
 656 |           !if (tmp5.lt.1.d-10) phicg(igaz)=phig(igaz,in)
 657 |           !if (tmp6 .eq. 0.d+0)  epocg(igaz) = kgbar(igaz,in)
 658 | !      cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz),
 659 | !     & tmp5,
 660 | !     & kgbar(igaz,in),sigma_1 !)
 661 | !     & ,kgbar(igaz,iin),sigma_2,phig(igaz,iin))
 662 |           !!print *, 'CROIS',igaz, phicg(igaz),tmp5,in,iin
 663 |           !! print *,'', cor(igaz)
 664 |           !cor(igaz)=1
 665 |          enddo
 666 |          include 'curtis.inc'
 667 |          correct = wcg
 668 |       endif
 669 |       !-------------------------
 670 |          
 671 | c****** calcul de la fonction psi(integrale) et ses derivees 
 672 | c -------{increment du poids optico-geom}
 673 | c
 674 |           tmp1=(long(iin)-long(iin-1))
 675 | !          w=cor(1)*cor(2)*cor(3)*correct*
 676 |           w=correct*
 677 |      &       poids*(1.D+0-dexp(-k(iin)*tmp1))
 678 | 
 679 | c -------{increment poids energetique}
 680 |           temperat= proftemp_index(iin,rayon,boolinterieur)
 681 |           if (boolssmaille) temperat = proftemp(rayon, rsup)
 682 |                 !print *, iin, rayon-rsup, temperat
 683 |                 !read *
 684 |           call black(eta(ibande)*1.d+2, temperat,emj)
 685 |           bj = (emj)/pi
 686 | 
 687 | c pour papier milieux epais: mcep
 688 | c bi = lblack(rayon)
 689 |           if (profssmaille) then 
 690 |           call error(boolssmaille) 
 691 |           bj = profblack(r(0), r(n+1), rayon, rsup)
 692 |           endif
 693 | 
 694 | c -------{calcul de psi...}
 695 |            if (debug.and.(in.eq.mmcte)) then
 696 |           print *, 'l4'
 697 |           print *, w
 698 |           endif
 699 |           if (.not. boolener) then
 700 |            bi = 1.d+0 
 701 |            bj= 0.d+0
 702 |           endif
 703 |           call trajet_fonc(w,bi,bj)
 704 |           if (sens.eq.2)then
 705 |              a = iin_min
 706 |              b = iin
 707 |              else
 708 |              a=in
 709 |              b=iin
 710 |           endif
 711 |           DO itmp1=a,b
 712 | ccccccccccccccccccccccccccccccccccccccccccccccc          DO itmp1=1,n
 713 |              !increment poids optico-geom
 714 | !            w_dk(itmp1)=cor(1)*cor(2)*cor(3)*correct*
 715 |             w_dk(itmp1)=correct*
 716 |      &         poids*dpdksp(itmp1)*(1.D+0-dexp(-k(iin)*tmp1))
 717 | ccc debug
 718 |             if (dexp(-k(iin)*tmp1).eq.1.d+0) then
 719 |                w_dk(itmp1) = 0.d+0
 720 |             endif
 721 | c             if ((itmp1.eq.in).and.(in.eq.1)) then
 722 | c             print *,  sens, in, iin, w_dk(itmp1)
 723 | c             print *, 'orig:   ',  poids,dpdksp(itmp1),
 724 | c     & (1.D+0-dexp(-k(iin)*tmp1))
 725 | c             read *
 726 | c             endif
 727 | 
 728 | 
 729 |             if (itmp1.eq.iin) then 
 730 |             w_dk(iin)=
 731 |      &       poids*tmp1*dexp(-k(iin)*tmp1)
 732 |             endif
 733 | 
 734 |             !increment poids energetique
 735 |             !!seule in et iin sont non nuls mais dans la boucle
 736 |             if (itmp1.eq.in) then
 737 |               !!temperat= proftemp_index(in,rayon)
 738 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 739 |               call black_dt (eta(ibande)*1.d+2, temperat,demi)
 740 |               bi_dt(itmp1)= (demi)/pi
 741 |               bj_dt(itmp1)= 0.d+0
 742 |               elseif (itmp1.eq.iin)  then
 743 |               !!temperat= proftemp_index(iin,rayon)
 744 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 745 |               call black_dt (eta(ibande)*1.d+2, temperat,demj)
 746 |               bj_dt(itmp1)= (demj)/pi
 747 |               bi_dt(itmp1)=0.d+0
 748 |               else
 749 |               bj_dt(itmp1)= 0.d+0
 750 |               bi_dt(itmp1)= 0.d+0
 751 |             endif
 752 | 
 753 | 
 754 |             !calcul de dpsi...
 755 |             call trajet_sens(itmp1,w,bi,bj,
 756 |      & w_dk(itmp1),bi_dt(itmp1),bj_dt(itmp1))
 757 |           ENDDO
 758 |          
 759 | c
 760 |         ENDIF
 761 | c
 762 | c******* attenuation dans la maille iin}
 763 | c
 764 |         tmp1=(long(iin)-long(iin-1))
 765 |         poids=poids*dexp(-k(iin)*tmp1)
 766 |         dpdksp(iin)=dpdksp(iin)-tmp1
 767 |       !------------CURTIS GODSON
 768 |       if (choixhet) then
 769 |       distance = distance + tmp1
 770 |         do igaz=1,ngaz
 771 |           kbarphi_s(igaz) = kbarphi_s(igaz) + 
 772 |      &    kgbar(igaz,iin)* phig(igaz,iin) * tmp1
 773 |           kbar_s(igaz) = kbar_s(igaz) + kgbar(igaz,iin)* tmp1
 774 |           phicg(igaz) = (kbarphi_s(igaz) / kbar_s(igaz)) 
 775 |           epocg(igaz) = kbar_s(igaz) ! ATTENION / distance
 776 | !          if (kbar_s(igaz).lt.1.d-10) phicg(igaz)=phig(igaz,in)
 777 | !          if (distance .eq. 0.d+0)  epocg(igaz) = kgbar(igaz,in)
 778 | !          cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz)
 779 | !     & ,kbar_s(igaz),kgbar(igaz,in),sigma_1 !)
 780 | !     & ,kgbar(igaz,iin),sigma_2,phig(igaz,iin))
 781 |           !!print *, 'CROISS tot',igaz, phicg(igaz),kbar_s(igaz),in,iin
 782 |            !!print *,'', cor(igaz)
 783 |           !cor(igaz)=1
 784 |          enddo
 785 | 
 786 | !      if (choixplus) correct = cg_mix(epocg, phicg)
 787 |       endif
 788 |       !-------------------------
 789 | c
 790 |       ENDDO
 791 | c
 792 | c ---{paroi externe}
 793 | c****** profil sous maille iin=n+1: reception
 794 |        !pas d'épaisseur
 795 |         iin = n+1
 796 |         rayon = r(iin) 
 797 |         rayon = r(n+1)
 798 |       !------------CURTIS GODSON
 799 |       if (choixhet) then
 800 |       !rien a faire
 801 |        do igaz=1,ngaz
 802 |           tmp4 = kbarphi_s(igaz)
 803 |           tmp5 = kbar_s(igaz)
 804 |           phicg(igaz) = tmp4 /tmp5
 805 |           epocg(igaz) = tmp5
 806 |        !kbarphi_s(igaz) = kbarphi_s(igaz) + 
 807 |        ! kgbar(igaz,in)* phig(igaz,in) *sigma_1
 808 |        ! kbar_s(igaz) = kbar_s(igaz) + kgbar(igaz,in)*sigma_1
 809 |        ! phicg(igaz) = (kbarphi_s(igaz) / kbar_s(igaz)) 
 810 | !      cor(igaz)=cg(in,iin,kgskgbar(igaz),phig(igaz,in),phicg(igaz),
 811 | !     & tmp5,
 812 | !     & kgbar(igaz,in),sigma_1   !)
 813 | !     & ,kgbar(igaz,iin),0.d+0,phig(igaz,iin))
 814 |        enddo
 815 |        include 'curtis.inc'
 816 |        correct = wcg
 817 |       endif
 818 |       !-------------------------
 819 | c****** calcul de la fonction psi(integrale) et ses derivees
 820 |        IF (in.NE.n+1) THEN
 821 |         ! la condition ci-dessous elimine le calcul de psi(a,a) nul
 822 |         ! par definition.
 823 |         ! dans le cas general ca arrive tres rarement donc pas tres important
 824 | 
 825 | c ------{increment poids optico-geom}
 826 | !        w=poids*cor(1)*cor(2)*cor(3)*correct
 827 |         w=poids*correct
 828 | 
 829 | c-------{increment poids energetique}
 830 |         temperat= proftemp_index(n+1,rayon,boolinterieur)
 831 |         if (boolssmaille) temperat = proftemp(rayon, rsup)
 832 |               !print *, n+1, rayon-rsup, temperat
 833 |               !read *
 834 |         call black(eta(ibande)*1.d+2, temperat,emj)
 835 |         bj = (emj)/pi
 836 | 
 837 | c pour papier milieux epais: mcep
 838 | c bi = lblack(rayon)
 839 |         if (profssmaille) then
 840 |         call error(boolssmaille)  
 841 |         bj = profblack(r(0), r(n+1), rayon, rsup)
 842 |         endif
 843 | c ------{calcul de psi...}
 844 |         iin = n+1
 845 |          if (debug.and.(in.eq.mmcte)) then
 846 |         print *, 'l5'
 847 |         print *, w
 848 |         endif 
 849 |         if (.not. boolener) then
 850 |            bi = 1.d+0 
 851 |            bj= 0.d+0
 852 |         endif
 853 |         call trajet_fonc(w,bi,bj)
 854 |          if (sens.eq.2)then
 855 |              a = iin_min
 856 |              b = n
 857 |              else
 858 |              a= in
 859 |              b= n
 860 |           endif
 861 |         DO itmp1=a,b
 862 | ccccccccccccccccccccccccccccccccccccccccccccccc        DO itmp1=1,n  
 863 |            !increment poids optico-geom
 864 | !          w_dk(itmp1)=cor(1)*cor(2)*cor(3)*correct*
 865 |           w_dk(itmp1)=correct*
 866 |      &       poids*dpdksp(itmp1)
 867 | 
 868 |           !increment poids energetique
 869 |           !!seule in et iin sont non nuls mais dans la boucle
 870 |           if (itmp1.eq.in) then
 871 |               !!temperat= proftemp_index(in,rayon)
 872 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 873 |               call black_dt (eta(ibande)*1.d+2, temperat,demi)
 874 | !            print *, in, iin, '  ', eta(ibande)*1.d+2, temperat,demi
 875 | !            read *
 876 |               bi_dt(itmp1)= (demi)/pi
 877 |               bj_dt(itmp1)= 0.d+0
 878 |               elseif (itmp1.eq.iin)  then
 879 |               !!temperat= proftemp_index(iin,rayon)
 880 |               !!if (boolssmaille) temperat = proftemp(rayon, rsup)
 881 |               call black_dt (eta(ibande)*1.d+2, temperat,demj)
 882 |               bj_dt(itmp1)= (demj)/pi
 883 |               bi_dt(itmp1)=0.d+0
 884 |               else
 885 |               bj_dt(itmp1)= 0.d+0
 886 |               bi_dt(itmp1)= 0.d+0
 887 |           endif
 888 | 
 889 |           ! calcul de dpsi...
 890 |           call trajet_sens(itmp1,w,bi,bj,
 891 |      & w_dk(itmp1),bi_dt(itmp1),bj_dt(itmp1))
 892 | 
 893 | 
 894 |         ENDDO
 895 |        
 896 |       ENDIF
 897 | c****** attenuation dans une paroi: non
 898 | 
 899 | 
 900 | 10002 CONTINUE
 901 | 
 902 | 
 903 | c
 904 | c.......................................................................
 905 | c
 906 |       RETURN
 907 |       END
 908 | 
 909 | c
 910 | c----------------------------------------------------------------------
 911 | c
 912 |       ! amaury nov 2002
 913 |       subroutine error(boolssmaille)
 914 |       implicit none
 915 |       logical boolssmaille
 916 |          if (.not. boolssmaille) then
 917 |             print *, 'ERROR: La description de la partie energetique'
 918 |             print *, '       en luminance ne peut pas se faire avec'
 919 |             print *, '       une forme CTE ou par INDEX'
 920 |             stop
 921 |          endif
 922 |       return
 923 |       end


trajet.f could be called by:
mcecile.f [archivage/code2000X_testCG] - 753 - 855 - 969 - 1107 - 1230
mcecile.f [resultats/pt1_complet] - 710 - 807 - 913 - 1044 - 1162
mcecile.f [src] - 1015 - 1154 - 1283 - 1454 - 1612