dustem_read_align.pro 2.45 KB
FUNCTION dustem_read_align,dir_in,st_grains,silent=silent

defsysv, '!run_circ', 0.  
defsysv, '!run_anis', 0.  
defsysv, '!run_rrf', 0.    
defsysv, '!run_univ', 0.    
defsysv, '!run_lin', 0.    

file=dir_in+(*!dustem_inputs).align
openr,unit,file,/get_lun
Nlines=0L
str=''
WHILE not eof(unit) DO BEGIN
      readf,unit,str
      Nlines=Nlines+1
ENDWHILE
close,unit
free_lun,unit
;== 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

IF stregex(key_str, 'lin', /bool) THEN !run_lin = 1
IF stregex(key_str, 'univ', /bool) THEN !run_univ = 1
IF stregex(key_str, 'circ', /bool) THEN !run_circ = 1
IF stregex(key_str, 'anis', /bool) THEN !run_anis = 1
IF stregex(key_str, 'rrf', /bool) THEN !run_rrf = 1

readf,unit,str,format='(A100)'
xx=strsplit(str,' ',/regex,/extr)
anisG0 = float(xx(0))
ncurrent+=+1
nalig=nlines-ncurrent

one_st={aligned:0.,law:'',athresh:0.,plev:0.,pstiff:0.,TdsTg:0.,a0:0.,rvcut:0.}
st=replicate(one_st,st_grains.Ngrains)

st.aligned = stregex(st_grains.grains.type_keywords, 'pol', /bool) 
;count=0
FOR i=0L,st_grains.Ngrains-1 DO BEGIN
   IF st(i).aligned then begin
        ; if count EQ 0. then begin   
         readf,unit,str,format='(A100)'   
      ;endif 
     
      	strv=str_sep(strcompress(strtrim(str,2)),' ')
      	Nstrv=n_elements(strv)

	ii=0L
      	st(i).law=strv(ii) & ii=ii+1 

	; IDG
        IF stregex(st(i).law, 'idg', /bool) THEN begin
           ii=ii+1 
      		st(i).TdsTg = strv(ii) & ii=ii+1
      		st(i).a0    = strv(ii) & ii=ii+1
      		st(i).rvcut = strv(ii) & ii=ii+1
	endif

	; RAT
      	IF stregex(st(i).law, 'rat', /bool) THEN begin
	endif

	; PARAMETRIC
        IF stregex(st(i).law, 'par', /bool) THEN begin
                                ; Grain radius Threshold for
                                ; alignment, given in microns and
                                ; converted in cm
      		st(i).athresh = strv(ii) & ii=ii+1
      		st(i).pstiff  = strv(ii) & ii=ii+1
                st(i).plev    = strv(ii) & ii=ii+1
                ; count=1
	endif

        IF !run_univ eq 1 then begin
		st = replicate(st(i),st_grains.Ngrains)
                st.aligned = stregex(st_grains.grains.type_keywords, 'pol', /bool)
                ;stop
		break
	endif
       
    
       
      ENDIF

ENDFOR

close,unit
free_lun,unit

full_st={keywords:key_str,anisG0:anisG0,gamma:0,grains:st}

RETURN,full_st

END