GeneralBrokenLines  Rev:70
 All Classes Files Functions Variables Pages
mille.f90
Go to the documentation of this file.
1 
2 ! Code converted using TO_F90 by Alan Miller
3 ! Date: 2012-03-03 Time: 17:00:12
4 
7 
55 
56 SUBROUTINE mille(nlc,derlc,ngl,dergl,label,rmeas,sigma) ! add data
57  IMPLICIT NONE
58  INTEGER :: i
59  INTEGER :: icount
60  INTEGER :: isp
61  INTEGER :: nr
62  INTEGER :: nsp
63  ! -----------------------------------------------------------------
64 
65  INTEGER, INTENT(IN) :: nlc
66  REAL, INTENT(IN) :: derlc(nlc)
67  INTEGER, INTENT(IN) :: ngl
68  REAL, INTENT(IN) :: dergl(ngl)
69  INTEGER, INTENT(IN) :: label(ngl)
70  REAL, INTENT(IN) :: rmeas
71  REAL, INTENT(IN) :: sigma
72  INTEGER, PARAMETER :: lun=51
73  INTEGER, PARAMETER :: ndim=5000
74  REAL :: glder(ndim) ! real data record array
75  INTEGER :: inder(ndim) ! integer data record array
76  ! -----------------------------------------------------------------
77 
78  SAVE
79  DATA nr/0/ ! initial record length
80  DATA icount/0/
81  ! ...
82  IF(sigma <= 0.0) return ! error zero - no measurement
83  IF(nr == 0) THEN
84  nr=1
85  glder(1)=0.0
86  inder(1)=0 ! error counter
87  isp=0
88  END IF
89  IF(nr+nlc+ngl+2 > ndim) THEN
90  icount=icount+1
91  IF(icount <= 10) THEN
92  WRITE(*,*) 'Mille warning: data can not be stored'
93  IF(icount == 10) THEN
94  WRITE(*,*) 'Mille warning: no further printout'
95  END IF
96  END IF
97  inder(1)=inder(1)+1 ! count errors
98  return ! record dimension too small
99  END IF
100  nr=nr+1
101  glder(nr)=rmeas ! measured value
102  inder(nr)=0
103  DO i=1,nlc ! local derivatives
104  IF(derlc(i) /= 0.0) THEN
105  nr=nr+1
106  glder(nr)=derlc(i) ! derivative of local parameter
107  inder(nr)=i ! index of local parameter
108  END IF
109  END DO
110 
111  nr=nr+1
112  glder(nr)=sigma ! error of measured value
113  inder(nr)=0
114  DO i=1,ngl ! global derivatives
115  IF(dergl(i) /= 0.0.AND.label(i) > 0) THEN
116  nr=nr+1
117  glder(nr)=dergl(i) ! derivative of global parameter
118  inder(nr)=label(i) ! index of global parameter
119  END IF
120  END DO
121  return
122 
123  entry millsp(nsp,dergl,label)
124  ! add NSP special words (floating-point and integer)
125 
126  ! 0.0 0
127  ! -float(NSP) 0 ! indicates special data
128  ! following NSP floating and NSP integer data
129 
130  IF(nsp <= 0.OR.isp /= 0) return
131  isp=nr
132  IF(nr == 0) THEN
133  nr=1
134  glder(1)=0.0
135  inder(1)=0 ! error counter
136  END IF
137  IF(nr+nsp+2 > ndim) THEN
138  inder(1)=inder(1)+1 ! count errors
139  return ! record dimension too small
140  END IF
141  nr=nr+1 ! zero pair
142  glder(nr)=0.0
143  inder(nr)=0
144  nr=nr+1 ! nsp and zero
145  glder(nr)=-float(nsp)
146  inder(nr)=0
147  DO i=1,nsp
148  nr=nr+1
149  glder(nr)=dergl(i) ! floating-point
150  inder(nr)=label(i) ! integer
151  END DO
152  return
153 
154  entry kille ! stop record
155  nr=0 ! reset
156  return
157 
158  entry endle ! end-of-record
159  IF(nr > 1) THEN
160  WRITE(lun) nr+nr,(glder(i),i=1,nr),(inder(i),i=1,nr)
161  END IF
162  nr=0 ! reset
163  return
164  END SUBROUTINE mille