[814] | 1 | !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
| 2 | ! SUBROUTINE getoptcld(WLN,RADIUS,Q_EXT,Q_SCT,Q_ABS,Q_BAR) |
---|
| 3 | ! |
---|
| 4 | ! Obtention des QEXT,Q_SCT,Q_ABS,Q_BAR pour une particule de rayon RADIUS a la longueur |
---|
| 5 | ! d'onde WLN . |
---|
| 6 | ! |
---|
| 7 | ! ARGUMENTS D'ENTREE : |
---|
| 8 | ! WLN : Longueur d'onde traitee (en metres !) |
---|
| 9 | ! RADIUS : Rayon de la particule (en metres !) |
---|
| 10 | ! |
---|
| 11 | ! ARGUMENT DE SORTIE : |
---|
| 12 | ! Q_EXT : section efficace d'extinction |
---|
| 13 | ! Q_SCT : section efficace de diffusion |
---|
| 14 | ! Q_ABS : section efficace d'absorption |
---|
| 15 | ! Q_BAR : Parametre d'asymetrie |
---|
| 16 | !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
| 17 | SUBROUTINE getoptcld(WLN,RADIUS,Q_EXT,Q_SCT,Q_ABS,Q_BAR) |
---|
| 18 | USE optcld |
---|
| 19 | IMPLICIT NONE |
---|
| 20 | ! ------ INPUT |
---|
| 21 | REAL ,INTENT(in) :: WLN,RADIUS |
---|
| 22 | ! ------ OUTPUT |
---|
| 23 | REAL ,INTENT(out) :: Q_EXT,Q_SCT,Q_ABS,Q_BAR |
---|
| 24 | ! ------ LOCAL/COMMON |
---|
| 25 | REAL :: tmp |
---|
| 26 | REAL,EXTERNAL :: get_qopt |
---|
| 27 | |
---|
| 28 | ! INTERPOLATION/EXTRAPOLATION de QEXT,QABS,QBAR et CALCUL de QSCT |
---|
| 29 | ! notes : |
---|
| 30 | ! Comme les indices optiques des gaz sont peu variables en ldo et qu'on |
---|
| 31 | ! approxime la goutte comme etant composee d'hydrocarbone seulement, on |
---|
| 32 | ! a les relations suivantes : |
---|
| 33 | ! sigma(r,ldo) = sigma(r0,ldo*r0/r) * (r/r0)**2. |
---|
| 34 | ! gg(r,ldo) = gg(r0,ldo*r0/r) |
---|
| 35 | ! |
---|
| 36 | ! La routine get_qopt calcule sigma(r0,ldo*r0/r) ou gg(r0,ldo*r0/r) (selon les inputs) |
---|
| 37 | ! ====> il ne reste plus qu'a multiplier par (r/r0)**2. les sections efficaces :) |
---|
| 38 | ! |
---|
| 39 | ! ------------ |
---|
| 40 | ! QEXT (attention : ltq_ex car on travaille en log dans get_qopt) |
---|
| 41 | ! ------------ |
---|
| 42 | tmp=get_qopt(radius,wln,A_ex,B_ex,fmin_ex,ltq_ex) |
---|
| 43 | Q_EXT=tmp*(radius/r0cld)**2. |
---|
| 44 | ! ------------ |
---|
| 45 | ! QABS (attention : ltq_ab car on travaille en log dans get_qopt) |
---|
| 46 | ! ------------ |
---|
| 47 | tmp=get_qopt(radius,wln,A_ab,B_ab,fmin_ab,ltq_ab) |
---|
| 48 | Q_ABS=tmp*(radius/r0cld)**2. |
---|
| 49 | ! ------------ |
---|
| 50 | ! QSCT |
---|
| 51 | ! ------------ |
---|
| 52 | Q_SCT=Q_EXT-Q_ABS |
---|
| 53 | ! ------------ |
---|
| 54 | ! QBAR (attention : ltq_gg car on travaille en log dans get_qopt) |
---|
| 55 | ! ------------ |
---|
| 56 | tmp=get_qopt(radius,wln,A_gg,B_gg,fmin_gg,ltq_gg) |
---|
| 57 | Q_BAR=tmp |
---|
| 58 | |
---|
| 59 | END SUBROUTINE getoptcld |
---|
| 60 | |
---|
| 61 | !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
| 62 | ! REAL FUNCTION get_qopt(r,wln,A,B,fmin,) |
---|
| 63 | ! |
---|
| 64 | ! obtention d'une propriete optique pour une particule de taille r a la longueur d'onde wln |
---|
| 65 | ! a partir de la table tq. |
---|
| 66 | ! Les parametres tq,fmin,A et B definissent la propriete calculee (qext,qabs ou gg) |
---|
| 67 | ! |
---|
| 68 | ! ARGUMENTS D'ENTREE : |
---|
| 69 | ! r : Rayon de la particule (en metres !) |
---|
| 70 | ! wln : Longueur d'onde traitee (en metres !) |
---|
| 71 | ! tq : table de la propriete. |
---|
| 72 | ! fmin : parametre pour extrapolation (debut de table) |
---|
| 73 | ! A : parametre (coefficient directeur) pour extrapolation (fin de table) |
---|
| 74 | ! B : parametre (ordonnee a l'origine) pour extrapolation (fin de table) |
---|
| 75 | ! |
---|
| 76 | ! VALEUR DE RETOUR : |
---|
| 77 | ! Propriete optique recherchee a wln pour une taille r. |
---|
| 78 | !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
| 79 | REAL FUNCTION get_qopt(r,wln,A,B,fmin,tq) |
---|
| 80 | USE optcld |
---|
| 81 | IMPLICIT NONE |
---|
| 82 | ! ------ INPUT |
---|
| 83 | REAL ,INTENT(in) :: r,wln,A,B,fmin,tq(npts) |
---|
| 84 | ! ------ LOCAL |
---|
| 85 | REAL :: wln_t,val |
---|
| 86 | INTEGER :: ind,iver |
---|
| 87 | |
---|
| 88 | ! initialisation generale |
---|
| 89 | iver = 0 |
---|
| 90 | val = 0. |
---|
| 91 | wln_t = wln * (r0cld/r) |
---|
| 92 | |
---|
| 93 | ! Recherche du point le plus proche dans la table |
---|
| 94 | CALL locate(tq_wln,npts,wln_t,ind) |
---|
| 95 | |
---|
| 96 | ! Interpolation/extrapolation selon l'indice. |
---|
| 97 | IF (ind.le.0) THEN |
---|
| 98 | val = fmin |
---|
| 99 | ELSEIF(ind.ge.npts) THEN |
---|
| 100 | CALL extrapolemoi(wln_t,A,B,val,.true.) |
---|
| 101 | ELSE |
---|
| 102 | CALL interpolemoi(ind,wln_t,ltq_wln,tq,npts,val,iver,.true.) |
---|
| 103 | ENDIF |
---|
| 104 | get_qopt=val |
---|
| 105 | |
---|
| 106 | END FUNCTION get_qopt |
---|
| 107 | |
---|
| 108 | |
---|