Subroutine sce_init

182 : 
183 : !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
184 : !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
185 : !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
186 : 
187 :       subroutine sce_init (run_initialseed)
188 :       use vom_sce_mod
189 :       implicit none
190 : 
191 :       INTEGER, INTENT(out) :: run_initialseed
192 : 
193 :       INTEGER             :: ii, jj
194 :       CHARACTER(3)        :: str
195 :       CHARACTER(24)       :: logdate
196 :       CHARACTER(len=135)  :: msg
197 : 
198 : !EXTERNAL compar
199 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
200 : ! Initialize the random number generator
201 : ! (standard subroutine, based on the date and time)
202 :       if (vom_command .ne. 4) then
203 :         CALL RANDOM_SEED()
204 :       endif
205 :       call fdate(logdate)
206 : !only run the next part the first time for allocation
207 : if( .not. allocated(optid) ) then
208 :       call read_shufflevar()
209 : 
210 : 
211 :    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
212 :    ! WRITE SCREEN HEADER
213 : 
214 :       write(*,*) 'SHUFFLED COMPLEX EVOLUTION OPTIMISER'
215 : 
216 :       write(*,*) " "
217 :       write(msg,'("  Run time:   ",A)') logdate
218 :       write(*,*) TRIM(msg)
219 : 
220 :    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
221 :    ! READ PARAMETER FILE shufflevar
222 : 
223 : 
224 :    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
225 :    ! CALCULATE NUMBER OF OPTIMISABLE PARAMETERS
226 : 
227 :       nopt = SUM(paropt(:))
228 :       mopt = 2 * nopt + 1               ! SCE VARIABLE m
229 : !     * number of complexes after Muttil(2004) or from shuffle.par
230 :       i_ncomp_ = MAX(i_ncomp_, CEILING(1.d0 + 2.d0 ** nopt             &
231 :      &         / (1.d0 + 2.d0 * nopt)))
232 :       sopt = mopt * i_ncomp_            ! SCE VARIABLE s
233 :       qopt = nopt + 1                   ! CCE VARIABLE q
234 :       ncomp2 = i_ncomp_
235 : 
236 :    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
237 :    ! ALLOCATE GLOBAL FIELDS
238 : 
239 : 
240 : 
241 :       allocate(optid(nopt))
242 :       allocate(shufflevar(vom_npar,sopt))
243 :       allocate(ofvec(sopt))
244 :       allocate(wgt(mopt))
245 :       allocate(cv_(nopt))
246 :       allocate(ranarr(nopt))
247 :       !allocate(ranarr_simplex(nopt))
248 :       allocate(dataarray(nopt*8+1,nopt+1))
249 :       allocate(shufflevar2(vom_npar))
250 :       !allocate(parentsid(qopt))
251 :       !allocate(objfunsub(qopt))
252 :       !allocate(invarsub(vom_npar,qopt))
253 :      ! allocate(selected(mopt))
254 :      ! allocate(centroid(vom_npar))
255 :      ! allocate(newpoint(vom_npar))
256 :       allocate(posarray(2**nopt,nopt))
257 :       allocate(initpop(nopt,5))
258 :       allocate(sumvar(nopt))
259 : 
260 : end if
261 : 
262 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
263 : ! INITIALISE OUTPUT FORMAT STRING
264 : ! INTRODUCED BY STAN TO HAVE ONE COLUMN PER PARAMETER AND ONE FOR OF
265 : 
266 :       write(str,'(i2)') vom_npar + 1    ! internal write to convert from integer to string
267 :       outformat = '('//str//'e24.15)'   ! includes a column for each parameter and a column for the value of OF
268 : 
269 : !     * ADDED BY STAN TO WRITE shufflevar AND ofvec OF LAST LOOP TO FILE
270 :       write(str,'(i3)') sopt            ! internal write to convert from number to string
271 :       loopformat = '('//str//'e24.15)'  ! includes a column for each set
272 : 
273 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
274 : ! INITIALISE optid: THE INDEX OF THOSE PARAMETERS THAT ARE OPTIMISABLE
275 : 
276 :       jj = 0
277 :       do ii = 1, vom_npar
278 :         if (paropt(ii) .gt. 0) then
279 :           jj = jj + 1
280 :           optid(jj) = ii
281 :         endif
282 :       enddo
283 : 
284 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
285 : ! INITIALISE optid: THE INDEX OF THOSE PARAMETERS THAT ARE OPTIMISABLE
286 : ! ASSIGN PROBABILITY WEIGHTS
287 : 
288 :       do ii = 1, mopt
289 :         wgt(ii) = 2.d0 * (mopt + 1.d0 - ii) / mopt / (mopt + 1.d0)
290 :       enddo
291 : 
292 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
293 : ! INSERTED BY STAN TO ALLOW CONTINUATION OF OPTIMSATION FROM PREVIOUSLY SAVED STEP
294 : 
295 :       call open_output (logdate, run_initialseed)
296 : 
297 :       return
298 :       end subroutine sce_init