source: trunk/LMDZ.TITAN.old/libf/phytitan/getqcld.F90 @ 3303

Last change on this file since 3303 was 814, checked in by slebonnois, 12 years ago

SL: corrections de bugs pour Titan, + suppression de la dependance circulaire dans mod_grid_phy_lmdz.F90, + petite inversion sur la ligne 101 de create_make_gcm pour que disvert compile du premier coup.

File size: 4.2 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.