! description : Return floating value from on-line option ! or from config file ! subroutine getf_option(name,config,nopt,option,test) implicit none INTEGER i,n,iargc,j,k,lnblnk,imin,idot,test,test0,nopt CHARACTER*256 var,argv CHARACTER*100 config,name,name2 CHARACTER*256 paravc(50) REAL*4 option(50) ! Option from config file test0 = 0 name2=name(2:lnblnk(name)) call read_para(name2,config,paravc,test0) ! Option from command line test=0 n= iargc() do i = 1, n call getarg(i,argv) var=argv if (var(1:lnblnk(var)) .eq. name(1:lnblnk(name))) then k= i + 1 call getarg(k,argv) var=argv call get_value(var,paravc,test) if (nopt.lt.50.and.test.ne.nopt) call err_option(name,3) endif enddo if (test .eq. 0) test=test0 do i = 1,50 if (i.le.test) then ! check if a "." is detected to avoid problem in float conversion imin=0 idot=0 ! write(6,*) i,test,paravc(i) do j = 1, lnblnk(paravc(i))+1 var=paravc(i)(j:j) if (var(1:1).eq.'.') then idot=1 endif if (var(1:1).eq.'e' & .or.var(1:1).eq.'E') imin=j enddo if (idot.eq.0 .and.imin.eq.0) then paravc(i) = paravc(i)(1:lnblnk(paravc(i))) // '.' elseif (idot.eq.0 .and.imin.ne.0) then paravc(i) = paravc(i)(1:imin-1) & // '.' // paravc(i)(imin:lnblnk(paravc(i))) endif read(paravc(i),'(E12.6)') option(i) else option(i)=0. endif enddo write(*,*) 'ok' return end Subroutine getf_option