source: trunk/SOURCES/minmax-format.f90 @ 10

Last change on this file since 10 was 4, checked in by dumas, 10 years ago

initial import GRISLI trunk

File size: 1.9 KB
Line 
1!> \file minmax-format.f90
2!! Module pour le calcul des min max admissibles a partir du format f.
3!<
4
5!> SUBROUTINE: minmax_format()
6!! \author ...
7!! \date ...
8!! @note Petite routine qui renvoie les valeurs min et max
9!! admissibles a partir du format f.
10!! @note Pour eviter les *****
11!! le format doit etre sous la forme f6.2 ou e12.4
12!! @note  Attention, pour les formats i, renvoie les min max en reel
13!! et ne marche pas au dela de i7
14!! @note  Pour le format e, renvoie valmin > valmax
15!! \param valmin
16!! \param valmax
17!! \param ff
18!<
19
20subroutine minmax_format(valmin,valmax,ff)
21implicit none
22
23real :: valmin
24real :: valmax
25character(len=8) :: ff
26character(len=3) :: f1
27
28integer  ::  if1,if2,ipos,ipos2,n1,if3
29integer :: ipr! precision du reel
30
31ipr=precision(1.)
32
33print*,ipr
34ff=adjustl(ff) ! aligne à gauche au cas ou un blanc aurait ete mis au debut
35
36if (( ff(1:1).eq.'f').or.(ff(1:1).eq.'F')) then ! format f
37
38! recherche du . et de la fin
39ipos=index(ff,'.')
40ipos2=ipos+2
41!ipos2=index(ff,' ')
42!ipos2=max(ipos2,ipos1+2)
43
44print*,ipos,ipos2
45print*,ff
46
47f1=ff(2:ipos-1) ! sous string contenant le premier chiffre
48if1=inum(f1)    ! valeur numerique du premier chiffre
49
50print*, 'if1=',if1
51f1=ff(ipos+1:ipos+2) ! sous string contenant le deuxieme chiffre
52print*, 'f1= ',trim(f1)//'***' 
53f1=adjustr(f1)
54if2=inum(f1)       ! valeur numerique
55print*, 'if2=',if2
56
57! valeur minimum
58n1=if1-if2-2
59if3=max(-if2,(if1-ipr-3-if2)) 
60valmin=-(10.**n1-10.**(if3))
61print*, if3
62
63! valeur maximum
64n1=n1+1
65if3=max(-if2,(if1-ipr-2-if2)) 
66print*, if3
67
68valmax=10.**n1-10.**(if3)
69
70else if (( ff(1:1).eq.'e').or.(ff(1:1).eq.'E')) then ! format e
71valmin=1.e30
72valmax=-1.e-30
73
74else if  (( ff(1:1).eq.'i').or.(ff(1:1).eq.'I')) then ! format i
75
76ipos2=index(ff,' ')
77f1=ff(2:ipos2-1) ! sous string contenant le  chiffre
78if1=inum(f1)    ! valeur numerique du premier chiffre
79n1=if1-1
80valmin=int(-(10**n1))+1
81
82n1=n1+1
83valmax=int((10**n1))-1
84endif
85
86end subroutine minmax_format
Note: See TracBrowser for help on using the repository browser.