source: trunk/SOURCES/next-time.f90 @ 334

Last change on this file since 334 was 65, checked in by dumas, 8 years ago

Deleting unused variables and move old sources

File size: 2.2 KB
Line 
1!> \file next-time.f90
2!! Calcule le pas de temps dt de facon dynamique
3!<
4
5!> SUBROUTINE: next_time()
6!! \author ...
7!! \date ...
8!! @note subroutine qui calcule le pas de temps dt de facon dynamique
9!! @note En entree on donne le "first guess" de dt
10!! @note En sortie on recupere un dt qui permet eventuellement la synchronisation exacte avec dtt
11!<
12subroutine next_time(time,dt,dtt,dtmax,dtmin,isynchro,itracebug,num_tracebug)
13
14  integer :: itracebug
15  integer :: num_tracebug
16  integer :: isynchro
17  real :: dt
18  real :: dtt
19  real :: dtmax
20  real :: dtmin
21  real  (kind=kind(0.d0)) :: time
22  real (kind=kind(0.d0)) :: time_loc
23  real (kind=kind(0.d0)) :: time2_loc
24  real (kind=kind(0.d0)) :: timesup
25  real (kind=kind(0.d0)) :: dtt_loc
26
27  time_loc=time
28
29  ! permet d'avoir dtt_loc sans probleme d'arrondi
30  if (dtt.ge.1.) then
31     dtt_loc=nint(dtt)
32  else
33     dtt_loc=nint(dtt*100.)/100.
34  endif
35
36  ! calcule (timesup) le temps de synchronisation ulterieur
37  ! on ajoute dtmin*0.2 pour eviter des problemes d'arrondis
38
39  timesup=dtt_loc*(floor((time_loc+0.2*dtmin)/dtt_loc)+1)
40  !write(6,*) 'floor',floor((time_loc+0.2*dtmin)/dtt)+1
41  !write(6,*) timesup,real(timesup)
42
43  dt=max(dtmin,dt)  ! dt > = dtmin
44  dt=min(dtmax,dt)  ! dt <= dtmax
45
46  ! time2_loc est le first guess de next time
47  time2_loc=time_loc+dt 
48  ! write(6,*) dtt,time2_loc
49  ! write(6,*)'time,time_loc,dtt,timesup,(floor((time_loc+0.2*dtmin)/dtt)+1),dt'
50  ! write(6,*) time,time_loc,dtt_loc,timesup,(floor((time_loc+0.2*dtmin)/dtt)+1),dt
51  ! si le nouveau temps est >= timesup next ->  time=timesup
52  ! idem si le nouveau temps est juste inferieur a timesup mais
53  ! que l'ecart est inferieur a dtmin/2 pour éviter un pas de temps trop
54  ! petit au pas de temps suivant
55
56  if (time2_loc.ge.timesup-dtmin*0.5) then  ! synchronisation
57     dt=timesup-time
58     time=timesup
59     isynchro=1
60
61  else
62     time=time2_loc
63     isynchro=0
64
65  endif
66
67  if (itracebug.eq.1)then
68     write(num_tracebug,*)
69     write(num_tracebug,*)'____________________________________________________'
70     write(num_tracebug,888) time, timesup,dt, isynchro
71     write(num_tracebug,*)
72  end if
73888 format ('time = ',f0.5,'   timesup = ',f0.1,'   dt = ',f0.5,'   isynchro = ',i1)
74end subroutine next_time
Note: See TracBrowser for help on using the repository browser.