Blame view

src/idl/dustem_read_grain.pro 6.3 KB
3c479f24   Ilyes Choubani   Allowing to fix p...
1
    FUNCTION dustem_read_grain,file,silent=silent,key_str=key_str,G0=G0,help=help
68d2f391   Jean-Philippe Bernard   modified to cope ...
2

452c334e   Ilyes Choubani   Implementation Of...
3
4


68d2f391   Jean-Philippe Bernard   modified to cope ...
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
;+
; NAME:
;    dustem_read_grain
; PURPOSE:
;    reads the file GRAIN.dat and returns the corresponding grain structure
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
;    st=dustem_read_grain(file,[/silent][,key_str=][,G0=][,/help])
; INPUTS:
;    file = file name to be read
; OPTIONAL INPUT PARAMETERS:
;    None
; OUTPUTS:
;    st: output structure
; OPTIONAL OUTPUT PARAMETERS:
;    key_str : a string containing grain keywords
;    G0      : The G0 value (scaling factor for radiation field)
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
;    silent      = If set, keeps quiet
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    None
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
; PROCEDURE:
;    None
; EXAMPLES
;    
; MODIFICATION HISTORY:
;    Written by J.-Ph. Bernard, N. Flagey, D. Paradis Jan 2007
;    see evolution details on the dustem cvs maintained at CESR
;    Contact J.-Ph. Bernard (Jean-Philippe.Bernard@cesr.fr) in case of problems.
;-
427f1205   Jean-Michel Glorian   version 4.2 merged
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

;=== Format for DUSTEM_WHICH=VERSTRAETE
;; # DUSTEM: definition of grain populations
;; # for each grain TYPE make sure you have the following files
;; # Q_TYPE.DAT in code_f90/les_QABS
;; # C_TYPE.DAT in code_f90/les_CAPA
;; # if option(MIX) MIX_TYPE.DAT in code_f90/les_DAT
;; # if option(POL) POL_TYPE.DAT in code_f90/les_DAT
;; # if keyword(SIZE) SIZE_TYPE.DAT in code_f90/les_DAT
;; # 
;; # run keywords
;; # G0 scaling factor for radiation field
;; # nr of grain types
;; # grain type -  Mdust/MH - rho(g/cm3) - amin(cm) - amax(cm) - alpha - nsize
;; #
;; SIZE
;; 1.00D+00
;; 3
;; PAH1    4.50D-04  2.25D+00  3.50D-08  7.22D-08  -3.50D+00   10  NONE
;; Gra     2.30D-03  2.25D+00  1.00D-07  5.00D-07  -3.50D+00   20  NONE
;; aSil    7.00D-03  3.30D+00  5.00D-07  1.10D-05  -3.50D+00   20  NONE
;; #

;=== Format for DUSTEM_WHICH=WEB3p8
;; # DUSTEM: definition of grain populations
;; # 
;; # run keywords 
;; # G0 scaling factor for radiation field
;; # grain type, nsize, type keywords, Mdust/MH, rho, amin, amax, alpha/a0 [, at, ac, gamma (ED)] [, au, zeta, eta (CV)]
;; # cgs units
;; #
;; sdist
;; 1.000000
;; PAH0              10 mix-logn           7.8000E-04  2.2400E+00  3.5000E-08  1.2000E-07  6.4000E-08  1.0000E-01
;; PAH1              10 mix-logn           7.8000E-04  2.2400E+00  3.5000E-08  1.2000E-07  6.4000E-08  1.0000E-01
68d2f391   Jean-Philippe Bernard   modified to cope ...
76
77
78
79
80
81
82
83
84
;; amCBEx            15 logn             1.6500E-04  1.8100E+00  6.0000E-08  2.0000E-06  2.0000E-07  3.5000E-01
;; amCBEx            25 plaw-ed      1.4500E-03  1.8100E+00  4.0000E-07  2.0000E-04 -2.8000E+00  1.5000E-05  1.5000E-05  2.0000E+00
;; aSil              25 plaw-ed        7.8000E-03  3.5000E+00  4.0000E-07  2.0000E-04 -3.4000E+00  2.0000E-05  2.0000E-05  2.0000E+00

IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_read_grain'
  full_st=0.
  goto,the_end
ENDIF
427f1205   Jean-Michel Glorian   version 4.2 merged
85

b5ccb706   Jean-Philippe Bernard   improved to fit p...
86
87
;!run_pol now defined in dustem_init.pro
;defsysv, '!run_pol', 0.         ; Global flag to know if polarisation is being run
68d2f391   Jean-Philippe Bernard   modified to cope ...
88
defsysv,'!run_tls',0.           ; Global flag to know if TLS is being run
427f1205   Jean-Michel Glorian   version 4.2 merged
89

427f1205   Jean-Michel Glorian   version 4.2 merged
90
CASE !dustem_which OF
3c479f24   Ilyes Choubani   Allowing to fix p...
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  
  'VERSTRAETE':BEGIN
    frmt='(A,D,D,D,D,D,I,A)'
    openr,unit,file,/get_lun
    str=''
    REPEAT BEGIN
      readf,unit,str
      first_char=strmid(str,0,1)
    ENDREP UNTIL first_char NE '#'
    key_str=str
    readf,unit,G0
    readf,unit,nspecies
    one_st={type:'',propmass:0.D0,densgr:0.D0,tmin:0.D0,tmax:0.D0,alpha:0.D0,ndiscr:0,flag:''}
    st=replicate(one_st,nspecies)
    FOR i=0L,nspecies-1 DO BEGIN
      readf,unit,str
      strv=str_sep(strcompress(str),' ')
      st(i).type=strv(0)
      st(i).propmass=double(strv(1))
      st(i).densgr=double(strv(2))
      st(i).tmin=double(strv(3))
      st(i).tmax=double(strv(4))
      st(i).alpha=double(strv(5))
      st(i).ndiscr=fix(strv(6))
      st(i).flag=strv(7)
    ENDFOR
    full_st=st
    close,unit
    free_lun,unit
  END

;   ELSE:BEGIN
;     readcol,file,type,albmax,densgr,ngem,hydro,ioni,silent=silent
;     nlines=n_elements(type)
; 
;     one_st={type:0,albmax:0.,densgr:0.,ngem:0,hydro:0.,ioni:0.}
;     st=replicate(one_st,Nlines)
;     st.type=type
;     st.albmax=albmax
;     st.densgr=densgr
;     st.ngem=ngem
;     st.hydro=hydro
;     st.ioni=ioni
;     full_st=st
;   END
    
  
  
  ELSE: BEGIN 
427f1205   Jean-Michel Glorian   version 4.2 merged
140
141
142
143
144
145
146
147
148
149
    frmt='(A,D,D,D,D,D,I,A)'
    ;count # of lines
    openr,unit,file,/get_lun
    Nlines=0L
    str=''
    WHILE not eof(unit) DO BEGIN
      readf,unit,str
      Nlines=Nlines+1
    ENDWHILE
    close,unit
68d2f391   Jean-Philippe Bernard   modified to cope ...
150
    free_lun,unit
427f1205   Jean-Michel Glorian   version 4.2 merged
151
152
153
154
155
156
157
158
159
    ;== now read the file
    openr,unit,file,/get_lun
    ncurrent=0L
    REPEAT BEGIN
      readf,unit,str
      ncurrent=ncurrent+1
      first_char=strmid(str,0,1)
    ENDREP UNTIL first_char NE '#'
    key_str=str
6730c3f8   Jean-Philippe Bernard   modified to be co...
160
    readf,unit,G0 & ncurrent=ncurrent+1
427f1205   Jean-Michel Glorian   version 4.2 merged
161
    nspecies=nlines-ncurrent
427f1205   Jean-Michel Glorian   version 4.2 merged
162
163
164
165
166
167
    one_st={grain_type:'',nsize:0L,type_keywords:'',Mdust_o_MH:0.D0,rho:0.D0,amin:0.D0,amax:0.D0,alpha_o_a0:0.D0, $
            at:0.D0,ac:0.D0,gamma:0.D0, $
            au:0.D0,zeta:0.D0,eta:0.D0}
    st=replicate(one_st,nspecies)
    FOR i=0L,nspecies-1 DO BEGIN
      readf,unit,str
427f1205   Jean-Michel Glorian   version 4.2 merged
168
      strv=str_sep(strcompress(strtrim(str,2)),' ')
427f1205   Jean-Michel Glorian   version 4.2 merged
169
170
171
172
173
      Nstrv=n_elements(strv)
      ii=0L
      st(i).grain_type=strv(ii) & ii=ii+1
      st(i).nsize=long(strv(ii)) & ii=ii+1
      st(i).type_keywords=strv(ii) & ii=ii+1
06fe3845   Ilyes Choubani   general update
174
      if isa(!dustem_kwords) then st(i).type_keywords=(*!dustem_kwords)(i)
427f1205   Jean-Michel Glorian   version 4.2 merged
175
      IF stregex(st(i).type_keywords, 'pol', /bool) THEN !run_pol = 1
427f1205   Jean-Michel Glorian   version 4.2 merged
176
      IF stregex(st(i).type_keywords, 'dtls', /bool) THEN !run_tls = 1
6730c3f8   Jean-Philippe Bernard   modified to be co...
177
      st(i).Mdust_o_MH=double(strv(ii)) & ii=ii+1
427f1205   Jean-Michel Glorian   version 4.2 merged
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
      st(i).rho=double(strv(ii))  & ii=ii+1
      st(i).amin=double(strv(ii)) & ii=ii+1
      st(i).amax=double(strv(ii)) & ii=ii+1
      st(i).alpha_o_a0=double(strv(ii)) & ii=ii+1
      IF ii LE Nstrv-1 THEN BEGIN
        st(i).at=double(strv(ii)) & ii=ii+1
      ENDIF
      IF ii LE Nstrv-1 THEN BEGIN
        st(i).ac=double(strv(ii)) & ii=ii+1
      ENDIF
      IF ii LE Nstrv-1 THEN BEGIN
        st(i).gamma=double(strv(ii)) & ii=ii+1
      ENDIF
      IF ii LE Nstrv-1 THEN BEGIN
        st(i).au=double(strv(ii)) & ii=ii+1
      ENDIF
      IF ii LE Nstrv-1 THEN BEGIN
        st(i).zeta=double(strv(ii)) & ii=ii+1
      ENDIF
      IF ii LE Nstrv-1 THEN BEGIN
        st(i).eta=double(strv(ii)) & ii=ii+1
      ENDIF
    ENDFOR
6730c3f8   Jean-Philippe Bernard   modified to be co...
201
    full_st=st
427f1205   Jean-Michel Glorian   version 4.2 merged
202
203
    close,unit
    free_lun,unit
3c479f24   Ilyes Choubani   Allowing to fix p...
204
205
206
  END  
    

427f1205   Jean-Michel Glorian   version 4.2 merged
207

427f1205   Jean-Michel Glorian   version 4.2 merged
208
209
ENDCASE

e69bf245   Jean-Philippe Bernard   improved
210

68d2f391   Jean-Philippe Bernard   modified to cope ...
211
the_end:
427f1205   Jean-Michel Glorian   version 4.2 merged
212

e69bf245   Jean-Philippe Bernard   improved
213
214
;stop 

68d2f391   Jean-Philippe Bernard   modified to cope ...
215
RETURN,full_st
427f1205   Jean-Michel Glorian   version 4.2 merged
216
217

END