Commit 19e26da90ead0802b07c774bad70370c2254242c

Authored by Ilyes Choubani
1 parent dcf48925
Exists in master

corrected stellar_population & write_isrf_lv

src/idl/dustem_plugin_stellar_population.pro
@@ -3143,76 +3143,13 @@ IF keyword_set(key) THEN BEGIN @@ -3143,76 +3143,13 @@ IF keyword_set(key) THEN BEGIN
3143 ;============================================================================================== 3143 ;==============================================================================================
3144 3144
3145 ENDFOR 3145 ENDFOR
3146 -  
3147 -;============This block creates a composite (9V) stellar population structure for when the function isn't used as a plugin===================  
3148 -ENDIF ELSE BEGIN  
3149 -  
3150 -;IF NOT keyword_set(scope) AND NOT keyword_set(val) THEN BEGIN ;I need this condition because I don't want the accidental definition of the system variable (@the end.) that is actually tied to any parameters outside this routine.  
3151 -  
3152 -  
3153 - popnumber = 5.  
3154 - comp_pop = replicate(one_pop,popnumber)  
3155 -  
3156 -  
3157 - ;###BY DEFAULT ALL STELLAR POPULATIONS ARE ON THE MS###  
3158 - ;BECAUSE LESS MASSIVE (COLDER) STARS ARE MORE ABUNDANT, THEY WILL BE CHOSEN TO BUILD THE COMPOSITE STELLAR STRUCTURE  
3159 - ;THIS MEANS THAT THE CHOSEN SPECTRAL TYPE IS 9V (MAIN SEQUENCE)  
3160 -  
3161 - ;CHOSEN STELLAR POPULATIONS  
3162 - ;O9V  
3163 - ;B9V  
3164 - ;A9V  
3165 - ;F9V  
3166 - ;G9V  
3167 -  
3168 - comp_pop(0).popid = 'O9V_stellar_population'  
3169 - comp_pop(0).radius = 7.51*rsun2cm  
3170 - comp_pop(0).temperature = 33.3e3  
3171 - comp_pop(0).distance = 10.0  
3172 - comp_pop(0).nstars = stellar_density*(4.*!pi/3)*comp_pop(0).distance  
3173 -  
3174 - comp_pop(1).popid = 'B9V_stellar_population'  
3175 - comp_pop(1).radius = 2.49*rsun2cm  
3176 - comp_pop(1).temperature = 10.7e3  
3177 - comp_pop(1).distance = 10.0  
3178 - comp_pop(1).nstars = stellar_density*(4.*!pi/3)*comp_pop(1).distance  
3179 -  
3180 - comp_pop(2).popid = 'A9V_stellar_population'  
3181 - comp_pop(2).radius = 1.747*rsun2cm  
3182 - comp_pop(2).temperature = 7.4e3  
3183 - comp_pop(2).distance = 10.0  
3184 - comp_pop(2).nstars = stellar_density*(4.*!pi/3)*comp_pop(2).distance  
3185 -  
3186 - comp_pop(3).popid = 'F9V_stellar_population'  
3187 - comp_pop(3).radius = 1.167*rsun2cm  
3188 - comp_pop(3).temperature = 6.05e3  
3189 - comp_pop(3).distance = 10.0  
3190 - comp_pop(3).nstars = stellar_density*(4.*!pi/3)*comp_pop(3).distance  
3191 -  
3192 - comp_pop(4).popid = 'G9V_stellar_population'  
3193 - comp_pop(4).radius = 0.853*rsun2cm  
3194 - comp_pop(4).temperature = 5.38e3  
3195 - comp_pop(4).distance = 10.0  
3196 - comp_pop(4).nstars = stellar_density*(4.*!pi/3)*comp_pop(4).distance  
3197 -  
3198 -  
3199 -;ENDIF  
3200 -  
3201 -ENDELSE  
3202 -  
3203 -if keyword_set(key) then begin  
3204 -print, 'comp_pop is:'  
3205 -print, comp_pop  
3206 -endif  
3207 -  
3208 -;stop  
3209 ;============================================================================================== 3146 ;==============================================================================================
3210 3147
3211 ;========================================================NOTA BENE============================================================================ 3148 ;========================================================NOTA BENE============================================================================
3212 ;THIS PROCEDURE DEVIDES BY THE VALUE OF G0. THE WRAPPER USES G0 AND GAS.G0. PLEASE LOCATE IT IN THE LINES BELOW AND CHANGE G0 TO THE ONE YOU'RE USING!!!! 3149 ;THIS PROCEDURE DEVIDES BY THE VALUE OF G0. THE WRAPPER USES G0 AND GAS.G0. PLEASE LOCATE IT IN THE LINES BELOW AND CHANGE G0 TO THE ONE YOU'RE USING!!!!
3213 ;============================================================================================================================================= 3150 ;=============================================================================================================================================
3214 3151
3215 -st=(*!dustem_params).isrf 3152 +st=((*!dustem_params).isrf)
3216 ;stop ;to check if the structure is indeed what we need. 3153 ;stop ;to check if the structure is indeed what we need.
3217 c2a = 3e18 ;speed of light in ansgtroms/s (because of the Astron's PLANCK function) 3154 c2a = 3e18 ;speed of light in ansgtroms/s (because of the Astron's PLANCK function)
3218 pc2cm = 3.086e18 ;cm (cgs) 3155 pc2cm = 3.086e18 ;cm (cgs)
@@ -3288,9 +3225,73 @@ FOR i=0L,n_waves-1 DO BEGIN @@ -3288,9 +3225,73 @@ FOR i=0L,n_waves-1 DO BEGIN
3288 ENDFOR 3225 ENDFOR
3289 3226
3290 close,unit 3227 close,unit
3291 -free_lun,unit 3228 +free_lun,unit
  3229 +
  3230 +out=st.isrf
  3231 +;============This block creates a composite (9V) stellar population structure for when the function isn't used as a plugin===================
  3232 +ENDIF ELSE BEGIN
  3233 +
  3234 +;IF NOT keyword_set(scope) AND NOT keyword_set(val) THEN BEGIN ;I need this condition because I don't want the accidental definition of the system variable (@the end.) that is actually tied to any parameters outside this routine.
  3235 +
  3236 +
  3237 + popnumber = 5.
  3238 + comp_pop = replicate(one_pop,popnumber)
  3239 +
  3240 +
  3241 + ;###BY DEFAULT ALL STELLAR POPULATIONS ARE ON THE MS###
  3242 + ;BECAUSE LESS MASSIVE (COLDER) STARS ARE MORE ABUNDANT, THEY WILL BE CHOSEN TO BUILD THE COMPOSITE STELLAR STRUCTURE
  3243 + ;THIS MEANS THAT THE CHOSEN SPECTRAL TYPE IS 9V (MAIN SEQUENCE)
  3244 +
  3245 + ;CHOSEN STELLAR POPULATIONS
  3246 + ;O9V
  3247 + ;B9V
  3248 + ;A9V
  3249 + ;F9V
  3250 + ;G9V
  3251 +
  3252 + comp_pop(0).popid = 'O9V_stellar_population'
  3253 + comp_pop(0).radius = 7.51*rsun2cm
  3254 + comp_pop(0).temperature = 33.3e3
  3255 + comp_pop(0).distance = 10.0
  3256 + comp_pop(0).nstars = stellar_density*(4.*!pi/3)*comp_pop(0).distance
  3257 +
  3258 + comp_pop(1).popid = 'B9V_stellar_population'
  3259 + comp_pop(1).radius = 2.49*rsun2cm
  3260 + comp_pop(1).temperature = 10.7e3
  3261 + comp_pop(1).distance = 10.0
  3262 + comp_pop(1).nstars = stellar_density*(4.*!pi/3)*comp_pop(1).distance
  3263 +
  3264 + comp_pop(2).popid = 'A9V_stellar_population'
  3265 + comp_pop(2).radius = 1.747*rsun2cm
  3266 + comp_pop(2).temperature = 7.4e3
  3267 + comp_pop(2).distance = 10.0
  3268 + comp_pop(2).nstars = stellar_density*(4.*!pi/3)*comp_pop(2).distance
  3269 +
  3270 + comp_pop(3).popid = 'F9V_stellar_population'
  3271 + comp_pop(3).radius = 1.167*rsun2cm
  3272 + comp_pop(3).temperature = 6.05e3
  3273 + comp_pop(3).distance = 10.0
  3274 + comp_pop(3).nstars = stellar_density*(4.*!pi/3)*comp_pop(3).distance
  3275 +
  3276 + comp_pop(4).popid = 'G9V_stellar_population'
  3277 + comp_pop(4).radius = 0.853*rsun2cm
  3278 + comp_pop(4).temperature = 5.38e3
  3279 + comp_pop(4).distance = 10.0
  3280 + comp_pop(4).nstars = stellar_density*(4.*!pi/3)*comp_pop(4).distance
  3281 +
  3282 + out=0.
  3283 +;ENDIF
  3284 +
  3285 +ENDELSE
  3286 +
  3287 +if keyword_set(key) then begin
  3288 +print, 'comp_pop is:'
  3289 +print, comp_pop
  3290 +endif
  3291 +
  3292 +;stop
3292 3293
3293 the_end: 3294 the_end:
3294 3295
3295 -return, st.isrf 3296 +return, out
3296 end 3297 end
3297 \ No newline at end of file 3298 \ No newline at end of file
src/idl/dustem_write_isrf_lv.pro
@@ -37,103 +37,40 @@ IF keyword_set(help) THEN BEGIN @@ -37,103 +37,40 @@ IF keyword_set(help) THEN BEGIN
37 ENDIF 37 ENDIF
38 38
39 39
40 -IF tag_exist((*!dustem_scope),'STELLAR_POPULATION') && ISA(((*!dustem_plugin).stellar_population)) THEN BEGIN  
41 - c2a = 3e18 ;speed of light in ansgtroms/s (because of the Astron's PLANCK function)  
42 - pc2cm = 3.086e18 ;cm (cgs)  
43 - wave_angstrom = st.lambisrf*1.e4 ;mic to Angstrom (Astron Planck's function uses wavelengths in Angstroms)  
44 -  
45 - stellar_component=fltarr(n_elements(st)) ; array of zeros to contain the new ISRF values.  
46 -  
47 - Ncomments = n_elements(((*(*!dustem_plugin).stellar_population).popid))*3+4  
48 - c = strarr(Ncomments)  
49 -  
50 -  
51 - ;First and last lines of the new composite ISRF.DAT file  
52 - c(0)='# DUSTEM: exciting radiation field featuring'  
53 - c(1)='# Mathis ISRF'  
54 - c(Ncomments-2)='# Nbr of points'  
55 - c(Ncomments-1)='# wave (microns), 4*pi*Inu (erg/cm2/s/Hz)'  
56 -  
57 - FOR i=0L,n_elements(((*(*!dustem_plugin).stellar_population).popid))-1 DO BEGIN ; Looping over all the stellar populations  
58 -  
59 - ;The initial procedure had omega multiplied by a !pi factor. Its presence in the Planck (Astron) procedure makes for a good reason to discuss this with J.P.  
60 -  
61 - omega = (((*(*!dustem_plugin).stellar_population).radius)[i]/(((*(*!dustem_plugin).stellar_population).distance)[i]*pc2cm))^2 ; Dilution factor of a stellar population  
62 -  
63 - Inu = planck(wave_angstrom,((*(*!dustem_plugin).stellar_population).temperature)[i])/(4.*!pi)*(wave_angstrom)^2/c2a ; ergs/cm2/s/Hz/sr  
64 -  
65 - ;========================================================NOTA BENE==================================================  
66 - ;Deving the amplitudes of the stellar populations by G0 as the composite ISRF is multiplied by the latter as a whole  
67 - ;===================================================================================================================  
68 -  
69 - stellar_component=stellar_component+((*(*!dustem_plugin).stellar_population).amplitude)[i]*((*(*!dustem_plugin).stellar_population).nstars)[i]*omega*Inu;/((*!dustem_params).gas.G0)  
70 -  
71 - ;Rest of the lines of the new composite ISRF.DAT file  
72 - c(3*i+2) = '#'+((*(*!dustem_plugin).stellar_population).popid)[i]  
73 - c(3*i+3) = '# Blackbody with T='+string(((*(*!dustem_plugin).stellar_population).temperature)[i])  
74 - c(3*i+4) = '# dilution factor wdil='+string(omega)  
75 -  
76 - ENDFOR  
77 -  
78 - print,'stellar_component is:'  
79 -  
80 - print, stellar_component  
81 -  
82 - print, 'isrf is:'  
83 - print, st.isrf  
84 -  
85 -  
86 - st.isrf=st.isrf+stellar_component/((*!dustem_params).G0)  
87 - openw,unit,file,/get_lun  
88 -  
89 - FOR i=0,Ncomments-1 DO BEGIN  
90 - printf,unit,c(i)  
91 - ENDFOR  
92 -  
93 - n_waves=n_elements(st)  
94 - printf,unit,n_waves  
95 -  
96 - FOR i=0L,n_waves-1 DO BEGIN  
97 - printf,unit,st(i).lambisrf,st(i).isrf  
98 - ENDFOR  
99 -  
100 - close,unit  
101 - free_lun,unit  
102 -  
103 -  
104 -ENDIF ELSE BEGIN  
105 -  
106 - Ncomments=6  
107 - c=strarr(Ncomments)  
108 -  
109 - ;First lines of the ISRF.DAT file  
110 - c(0)='# DUSTEM: exciting radiation field featuring'  
111 - c(1)='# Mathis ISRF'  
112 - c(2)='# Blackbody with T= 0.0000E+00'  
113 - c(3)='# dilution factor wdil= 1.0000E+00'  
114 - c(4)='# Nbr of points'  
115 - c(5)='# wave (microns), 4*pi*Inu (erg/cm2/s/Hz)'  
116 -  
117 - openw,unit,file,/get_lun  
118 -  
119 - FOR i=0,Ncomments-1 DO BEGIN  
120 - printf,unit,c(i)  
121 - ENDFOR  
122 -  
123 - n_waves=n_elements(st)  
124 - printf,unit,n_waves  
125 -  
126 - FOR i=0L,n_waves-1 DO BEGIN  
127 - printf,unit,st(i).lambisrf,st(i).isrf  
128 - ENDFOR  
129 -  
130 - close,unit  
131 - free_lun,unit  
132 -  
133 - the_end:  
134 -  
135 -  
136 -ENDELSE 40 +IF ptr_valid((*!dustem_plugin).stellar_population) THEN goto, the_end
  41 +
  42 +;NOW YOU HAVE TO LOOP ON THE COMMENTS TO SEE IF IT IS THE COMPOSITE ISRF FILE OR THE MATHIS ONE.
  43 +
  44 +Ncomments=6
  45 +c=strarr(Ncomments)
  46 +
  47 +;MODIFY THIS TO DISPLAY THE ACTUAL VALUES BECAUSE IT IS JUST DISPLAYING EMPTY STRINGS AT THE MOMENT
  48 +
  49 +;First lines of the ISRF.DAT file
  50 +c(0)='# DUSTEM: exciting radiation field featuring'
  51 +c(1)='# Mathis ISRF'
  52 +c(2)='# Blackbody with T= 0.0000E+00'
  53 +c(3)='# dilution factor wdil= 1.0000E+00'
  54 +c(4)='# Nbr of points'
  55 +c(5)='# wave (microns), 4*pi*Inu (erg/cm2/s/Hz)'
  56 +
  57 +openw,unit,file,/get_lun
  58 +
  59 +FOR i=0,Ncomments-1 DO BEGIN
  60 + printf,unit,c(i)
  61 +ENDFOR
  62 +
  63 +n_waves=n_elements(st)
  64 +printf,unit,n_waves
  65 +
  66 +FOR i=0L,n_waves-1 DO BEGIN
  67 + printf,unit,st(i).lambisrf,st(i).isrf
  68 +ENDFOR
  69 +
  70 +close,unit
  71 +free_lun,unit
  72 +
  73 +the_end:
137 74
138 75
139 END 76 END