!> \file minmax-format.f90 !! Module pour le calcul des min max admissibles a partir du format f. !< !> SUBROUTINE: minmax_format() !! \author ... !! \date ... !! @note Petite routine qui renvoie les valeurs min et max !! admissibles a partir du format f. !! @note Pour eviter les ***** !! le format doit etre sous la forme f6.2 ou e12.4 !! @note Attention, pour les formats i, renvoie les min max en reel !! et ne marche pas au dela de i7 !! @note Pour le format e, renvoie valmin > valmax !! \param valmin !! \param valmax !! \param ff !< subroutine minmax_format(valmin,valmax,ff) implicit none real :: valmin real :: valmax character(len=8) :: ff character(len=3) :: f1 integer :: if1,if2,ipos,ipos2,n1,if3 integer :: ipr! precision du reel ipr=precision(1.) print*,ipr ff=adjustl(ff) ! aligne à gauche au cas ou un blanc aurait ete mis au debut if (( ff(1:1).eq.'f').or.(ff(1:1).eq.'F')) then ! format f ! recherche du . et de la fin ipos=index(ff,'.') ipos2=ipos+2 !ipos2=index(ff,' ') !ipos2=max(ipos2,ipos1+2) print*,ipos,ipos2 print*,ff f1=ff(2:ipos-1) ! sous string contenant le premier chiffre if1=inum(f1) ! valeur numerique du premier chiffre print*, 'if1=',if1 f1=ff(ipos+1:ipos+2) ! sous string contenant le deuxieme chiffre print*, 'f1= ',trim(f1)//'***' f1=adjustr(f1) if2=inum(f1) ! valeur numerique print*, 'if2=',if2 ! valeur minimum n1=if1-if2-2 if3=max(-if2,(if1-ipr-3-if2)) valmin=-(10.**n1-10.**(if3)) print*, if3 ! valeur maximum n1=n1+1 if3=max(-if2,(if1-ipr-2-if2)) print*, if3 valmax=10.**n1-10.**(if3) else if (( ff(1:1).eq.'e').or.(ff(1:1).eq.'E')) then ! format e valmin=1.e30 valmax=-1.e-30 else if (( ff(1:1).eq.'i').or.(ff(1:1).eq.'I')) then ! format i ipos2=index(ff,' ') f1=ff(2:ipos2-1) ! sous string contenant le chiffre if1=inum(f1) ! valeur numerique du premier chiffre n1=if1-1 valmin=int(-(10**n1))+1 n1=n1+1 valmax=int((10**n1))-1 endif end subroutine minmax_format