GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/rrtm/dates.F90 Lines: 0 234 0.0 %
Date: 2023-06-30 12:51:15 Branches: 0 72 0.0 %

Line Branch Exec Source
1
subroutine dates_demo
2
! --------------------------------------------------------------
3
!
4
! Conseils a l'utilisateur:
5
!
6
! 1. VOUS COMPILEZ LES ENTIERS EN 32 BITS:
7
! Utilisez alors les routines
8
! - ecartds: Ecart en secondes entre deux dates.
9
! - ecartdj: Ecart en jours entre deux dates.
10
! - dapluss: Date dans n secondes.
11
! - daplusj: Date dans n jours.
12
! - qqmmaa: Conversion d'un entier type AAAAQQMM vers une date en clair.
13
! - ijoursem: Jour de la semaine de la date d'entree.
14
! - quant: quantieme de l'annee d'une date donnee.
15
! Ces routines sont compatibles avec des entiers 32 bits.
16
! En effet elles appelent les routines citees ci-dessous, mais avec
17
! les parametres subsequents assurant que seuls des entiers
18
! representables en 32 bits y soient utilises.
19
!
20
! 2. VOUS COMPILEZ LES ENTIERS EN 64 BITS:
21
! Vous pouvez alors utiliser toutes les routines ci-dessus
22
! plus les suivantes, qui traitent des formats de dates
23
! en entree/sortie en JOURS, HEURES, MINUTES ou SECONDES:
24
! - ecartd: Ecart entre deux dates.
25
! - gregod: Conversion Date > Ecart par rapport a une date fixe.
26
! - gregoi: Conversion Ecart par rapport a une date fixe > Date.
27
! - daplus: Quelle sera la date dans n jours (ou heures, etc...)?
28
! - amqhms_vers_dj: Conversion date gr�gorienne (en 5 entiers et un r�el) > date julienne.
29
! - dj_vers_amqhms: Conversion date julienne > date gr�gorienne (en 5 entiers et un r�el).
30
! - amqhmsree_vers_dj: Conversion date gr�gorienne (en un seul r�el) > date julienne.
31
! - dj_vers_amqhmsree: Conversion date julienne > date gr�gorienne (en un seul r�el).
32
!
33
! --------------------------------------------------------------
34
!
35
! D�finition des dates employ�es ci-dessous:
36
!
37
! Date julienne DJ:
38
!       Elle est compos�e d'un r�el.
39
!       R1: Ce r�el cro�t de 1 tous les jours,
40
!               et vaut 2451545.0 le 1er janvier 2000 � 12 UTC.
41
!
42
! Date gr�gorienne "en clair" AMQHMS:
43
!       Elle est compos�e de 5 entiers et d'un r�el.
44
!       E1: Ann�e (4 chiffres!)
45
!       E2: Mois
46
!       E3: Jour
47
!       E4: Heure
48
!       E5: Minute
49
!       R1: Seconde
50
! --------------------------------------------------------------
51
52
53
IMPLICIT NONE
54
end
55
subroutine date_plus_ech(kan,kmo,kqu,psssss,pstati,cdtit)
56
! --------------------------------------------------------------
57
! Ecriture en clair d'une date de type BASE 2000.01.15 00:00 +72H VALID 2000.01.18 15:00.
58
! --------------------------------------------------------------
59
! Sujet:
60
! Arguments explicites:
61
! Arguments implicites:
62
! Methode:
63
! Externes:
64
! Auteur:   2000-09, J.M. Piriou.
65
! Modifications:
66
! --------------------------------------------------------------
67
! En entree:
68
! kan,kmo,kqu,psssss,pstati
69
! En sortie:
70
! cdtit
71
! --------------------------------------------------------------
72
73
74
IMPLICIT NONE
75
INTEGER(KIND=4) :: kan,kmo,kqu,ihe,imi,imiv,ihev,iquv,imov,ianv,ilze
76
REAL(KIND=8) :: psssss,pstati
77
REAL(KIND=8) :: zs
78
REAL(KIND=8) :: zsssss,zdj,zsv
79
REAL(KIND=8) :: zech
80
character*200 clzue,clze,clech
81
character *(*) cdtit
82
!
83
!-------------------------------------------------
84
! Date de validit�.
85
!-------------------------------------------------
86
!
87
zs=0.
88
zsssss=psssss/3600.
89
ihe=int(zsssss) ! heure de la base.
90
zsssss=(zsssss-real(ihe))*60.
91
imi=int(zsssss) ! minute de la base.
92
zsssss=zsssss-real(imi)
93
call amqhms_vers_dj(kan,kmo,kqu,ihe,imi,zs,zdj)
94
zdj=zdj+pstati/86400. ! date julienne de validit�.
95
call dj_vers_amqhms(zdj,ianv,imov,iquv,ihev,imiv,zsv) ! date gr�gorienne de validit�.
96
if(pstati < 3600.) then
97
!
98
!-------------------------------------------------
99
! Ech�ance en minutes.
100
!-------------------------------------------------
101
!
102
	zech=pstati/60. ; clzue='mn'
103
elseif(pstati < 259200.) then
104
!
105
!-------------------------------------------------
106
! Ech�ance en heures.
107
!-------------------------------------------------
108
!
109
	zech=pstati/3600. ; clzue='h'
110
else
111
!
112
!-------------------------------------------------
113
! Ech�ance en jours.
114
!-------------------------------------------------
115
!
116
	zech=pstati/86400. ; clzue='j'
117
endif
118
!
119
! Affichage de l'echeance avec deux chiffres apres la virgule.
120
!
121
write(clze,fmt='(f9.2)') zech
122
!
123
! Si l'echeance est voisine d'un entier a mieux que 10**-2 pres,
124
! on l'affiche au format entier.
125
!
126
if(clze(len_trim(clze)-2:len_trim(clze)) == '.00') then
127
	clze=clze(1:len_trim(clze)-3)
128
endif
129
clze=adjustl(clze)
130
ilze=len_trim(clze)
131
clech=clze(1:ilze)//clzue
132
!
133
!-------------------------------------------------
134
! Titre 3, de type
135
! BASE 2000.01.15 00:00 +72H VALID 2000.01.18 15:00.
136
!-------------------------------------------------
137
!
138
if(imi == 0 .and. imiv == 0) then
139
!
140
!-------------------------------------------------
141
! Les minutes de base et validit� sont nulles.
142
! On ne les affiche pas.
143
!-------------------------------------------------
144
!
145
	write(cdtit,fmt='(a,i2,a,i2.2,a,i4.4,a,i2.2,3a,i2,a,i2.2,a,i4.4,a,i2.2,a)')&
146
	&'BASE ',kqu,'.',kmo,'.',kan,' ',ihe,'h UTC + ',clech(1:len_trim(clech))&
147
	&,', VALID ',iquv,'.',imov,'.',ianv,' ',ihev,'h UTC'
148
else
149
!
150
!-------------------------------------------------
151
! Les minutes de base ou validit� sont non nulles.
152
! On les affiche.
153
!-------------------------------------------------
154
!
155
	write(cdtit,fmt='(a,i2,a,i2.2,a,i4.4,a,i2.2,a,i2.2,3a,i2,a,i2.2,a,i4.4,a,i2.2,a,i2.2,a)')&
156
	&'BASE ',kqu,'.',kmo,'.',kan,' ',ihe,':',imi,' UTC + ',clech(1:len_trim(clech))&
157
	&,' VALID ',iquv,'.',imov,'.',ianv,' ',ihev,':',imiv,' UTC'
158
endif
159
end
160
subroutine datc(kaaaa,kmm,kqq,khh,kmi,kss,kjs,cdjs,cddt)
161
! --------------------------------------------------------------
162
! **** *datc* Date courante machine.
163
! --------------------------------------------------------------
164
! Sujet:
165
! ------
166
! Arguments explicites:
167
! ---------------------
168
! Arguments implicites:
169
! ---------------------
170
! Methode:
171
! --------
172
! Externes:
173
! ---------
174
! Auteur:   95-05, J.M. Piriou.
175
! -------
176
! Modifications:
177
! --------------------------------------------------------------
178
! En entree:
179
! En sortie:
180
! kaaaa      annee.
181
! kmm      mois.
182
! kqq      quantieme.
183
! khh      heure.
184
! kmi      minute.
185
! kss      seconde.
186
! kjs      jour de la semaine (0: dimanche, 6 samedi).
187
! cdjs      jour de la semaine sur 3 caracteres (Dim, Lun, etc...).
188
! cddt      date totale (19950301-Mer-16:56:32).
189
! --------------------------------------------------------------
190
191
192
IMPLICIT NONE
193
INTEGER(KIND=4) :: idatat(8)
194
INTEGER(KIND=4) :: kjs
195
INTEGER(KIND=4) :: kss
196
INTEGER(KIND=4) :: kmi
197
INTEGER(KIND=4) :: khh
198
INTEGER(KIND=4) :: kqq
199
INTEGER(KIND=4) :: kmm
200
INTEGER(KIND=4) :: kaaaa
201
INTEGER(KIND=4) :: iaaaammqq
202
INTEGER(KIND=4) :: ijoursem
203
REAL(KIND=8) :: zs
204
character*200 clgol1,clgol2,clgol3
205
character*3 cdjs
206
character*(*) cddt
207
character*3 cljour(0:6)
208
data cljour/'Dim','Lun','Mar','Mer','Jeu','Ven','Sam'/
209
!
210
!-------------------------------------------------
211
! Date courante � la f90.
212
!-------------------------------------------------
213
!
214
clgol1=' '
215
clgol2=' '
216
clgol3=' '
217
call date_and_time(clgol1,clgol2,clgol3,idatat)
218
!
219
!-------------------------------------------------
220
! clgol1 est du type "AAAAMMQQ".
221
!-------------------------------------------------
222
!
223
read(clgol1,fmt='(i4,2i2)') kaaaa,kmm,kqq
224
!
225
!-------------------------------------------------
226
! clgol2 est du type "HHMMSS.SSS".
227
!-------------------------------------------------
228
!
229
read(clgol2,fmt='(2i2)') khh,kmi
230
read(clgol2(5:),fmt=*) zs
231
kss=nint(zs)
232
read(clgol1,fmt='(i8)') iaaaammqq
233
!
234
!-------------------------------------------------
235
! Jour de la semaine.
236
!-------------------------------------------------
237
!
238
kjs=ijoursem(iaaaammqq)
239
cdjs=cljour(kjs)
240
!
241
!-------------------------------------------------
242
! Date totale.
243
!-------------------------------------------------
244
!
245
write(cddt,fmt='(i4.4,a,2(i2.2,a),2a,i2.2,a,i2.2,a,i2.2)') &
246
&kaaaa,'_',kmm,'_',kqq,'_',cdjs,'_',khh,':',kmi,':',kss
247
end
248
subroutine amqhms_vers_dj(kaaaa,kmm,kqq,khh,kmn,ps,pdj)
249
! --------------------------------------------------------------------------
250
! **** *amqhms_vers_dj*
251
! --------------------------------------------------------------------------
252
! Auteur:
253
! -------
254
! 1999-08-17, J.M. Piriou.
255
!
256
! Modifications:
257
! --------------
258
!
259
! --------------------------------------------------------------------------
260
! En entree:
261
! kaaaa ann�e (4 chiffres!)
262
! kmm   mois
263
! kqq   quanti�me du mois
264
! khh   heure
265
! kmn   minute
266
! ps    seconde
267
! En sortie:
268
! pdj date julienne associ�e � la date gr�gorienne UTC d'entr�e
269
! --------------------------------------------------------------------------
270
271
272
IMPLICIT NONE
273
INTEGER(KIND=4) :: IDATE1
274
INTEGER(KIND=4) :: IDATE2
275
INTEGER(KIND=4) :: IECART
276
INTEGER(KIND=4) :: KAAAA
277
INTEGER(KIND=4) :: KHH
278
INTEGER(KIND=4) :: KMM
279
INTEGER(KIND=4) :: KMN
280
INTEGER(KIND=4) :: KQQ
281
REAL(KIND=8) :: PDJ
282
REAL(KIND=8) :: PS
283
284
idate1=20000101
285
idate2=kaaaa*10000+kmm*100+kqq
286
!
287
!-------------------------------------------------
288
! Nombre de jours �coul�s entre la date
289
! d'entr�e � 0h UTC et le 1er janvier 2000 � 0h UTC.
290
!-------------------------------------------------
291
!
292
call ecartdj(idate1,idate2,iecart)
293
!
294
!-------------------------------------------------
295
! Date julienne.
296
!-------------------------------------------------
297
!
298
pdj=2451545.0- 0.5 +real(iecart)+real(khh)/24. &
299
& +real(kmn)/1440.+ps/86400.
300
end
301
subroutine daplus(kdat1,kopt,kdelt,kdat2)
302
! --------------------------------------------------------------------------
303
! **** *DAPLUS* Quelle sera la date dans n jours (ou heures, etc...)?
304
! --------------------------------------------------------------------------
305
! Auteur:
306
! -------
307
! 94-10-31, J.M. Piriou.
308
!
309
! Modifications:
310
! --------------
311
!
312
! --------------------------------------------------------------------------
313
! En entree:
314
! kdat1
315
! kopt option de precision sur les dates:
316
! 1 : au jour pres
317
! 2 : a l'heure pres
318
! 3 : a la minute pres
319
! 4 : a la seconde pres
320
! - si kopt=1 : kdat au format AAAAMMQQ
321
! - si kopt=2 : kdat au format AAAAMMQQHH
322
! - si kopt=3 : kdat au format AAAAMMQQHHMM
323
! - si kopt=4 : kdat au format AAAAMMQQHHMMSS
324
! (cf. GREGOD).
325
! kdelt duree a ajouter a kdat1, unite: celle imposee par kopt.
326
! En sortie:
327
! kdat2 date finale.
328
!
329
! --------------------------------------------------------------------------
330
! Exemple: call DAPLUS(19940503,1,456,ires) fournira
331
! dans ires la date au format AAAAMMQQ situee 456 jours apres
332
! le 3 mai 1994.
333
! --------------------------------------------------------------------------
334
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
335
! ATTENTION A LA PRECISION:
336
! 1. Vous compilez les entiers sur 32 bits:
337
! Vous devez alors vous limiter a kopt <= 2.
338
! 2. Vous compilez les entiers sur 64 bits:
339
! Vous pouvez utiliser toutes les valeurs de kopt.
340
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
341
342
343
IMPLICIT NONE
344
INTEGER(KIND=4) :: IGRE
345
INTEGER(KIND=4) :: KDAT1
346
INTEGER(KIND=4) :: KDAT2
347
INTEGER(KIND=4) :: KDELT
348
INTEGER(KIND=4) :: KOPT
349
call gregod(kdat1,kopt,igre)
350
igre=igre+kdelt
351
call gregoi(igre,kopt,kdat2)
352
end
353
subroutine daplusj(k1,kec,k2)
354
! --------------------------------------------------------------
355
! **** *daplusj* Date dans n jours.
356
! --------------------------------------------------------------
357
! Sujet:
358
! Arguments explicites:
359
! Arguments implicites:
360
! Methode:
361
! Externes:
362
! Auteur:   97-11, J.M. Piriou.
363
! Modifications:
364
! --------------------------------------------------------------
365
! En entree:
366
! k1 date de depart au format AAAAMMQQ.
367
! kec nombre de jours ecoules.
368
! En sortie:
369
! k2 date d'arrivee au format AAAAMMQQ.
370
! --------------------------------------------------------------
371
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
372
! PRECISION:
373
! Cette routine est utilisable avec des entiers 32 bits ou 64 bits.
374
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
375
!
376
! -------------------------------------------------
377
! Date d'arrivee au jour pres.
378
! -------------------------------------------------
379
!
380
381
382
IMPLICIT NONE
383
INTEGER(KIND=4) :: K1
384
INTEGER(KIND=4) :: K2
385
INTEGER(KIND=4) :: KEC
386
call daplus(k1,1,kec,k2)
387
end
388
subroutine dapluss(cd1,kec,cd2)
389
! --------------------------------------------------------------
390
! **** *dapluss* Date dans n secondes.
391
! --------------------------------------------------------------
392
! Sujet:
393
! Arguments explicites:
394
! Arguments implicites:
395
! Methode:
396
! Externes:
397
! Auteur:   97-11, J.M. Piriou.
398
! Modifications:
399
! --------------------------------------------------------------
400
! En entree:
401
! cd1 date de depart au format 'AAAAMMQQHHNNSS'.
402
! kec nombre de secondes ecoulees.
403
! En sortie:
404
! cd2 date d'arrivee au format 'AAAAMMQQHHNNSS'.
405
! --------------------------------------------------------------
406
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
407
! ATTENTION A LA PRECISION:
408
! Cette routine est utilisable avec des entiers 32 bits,
409
! si l'ecart entre les deux dates est inferieur a 2**31 secondes,
410
! soit 68 ans!...
411
!
412
! Au-dela de cette duree, les entiers doivent etre 64 bits.
413
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
414
415
416
IMPLICIT NONE
417
INTEGER(KIND=4) :: IAMQ1
418
INTEGER(KIND=4) :: IAMQ2
419
INTEGER(KIND=4) :: IDELTA
420
INTEGER(KIND=4) :: IECJOURS
421
INTEGER(KIND=4) :: IH1
422
INTEGER(KIND=4) :: IH2
423
INTEGER(KIND=4) :: IM1
424
INTEGER(KIND=4) :: IM2
425
INTEGER(KIND=4) :: IRESTE
426
INTEGER(KIND=4) :: IS1
427
INTEGER(KIND=4) :: IS2
428
INTEGER(KIND=4) :: ISEC
429
INTEGER(KIND=4) :: KEC
430
character*(*) cd1,cd2
431
!
432
! -------------------------------------------------
433
! On lit les dates sur des entiers.
434
! -------------------------------------------------
435
!
436
read(cd1,fmt='(i8,3i2)') iamq1,ih1,im1,is1
437
!
438
! -------------------------------------------------
439
! Calculs d'ecarts et de leur partition
440
! en multiples de 86400 et sous-multiples.
441
! -------------------------------------------------
442
!
443
isec=ih1*3600+im1*60+is1 ! nombre de secondes ecoulees depuis cd10h.
444
idelta=kec+isec ! nombre de secondes entre cd10h et cd2.
445
ireste=modulo(idelta,86400) ! nombre de secondes entre cd20h et cd2.
446
iecjours=(idelta-ireste)/86400 ! nombre de jours entre cd10h et cd20h.
447
!
448
! -------------------------------------------------
449
! Date d'arrivee au jour pres.
450
! -------------------------------------------------
451
!
452
call daplus(iamq1,1,iecjours,iamq2)
453
!
454
! -------------------------------------------------
455
! Date finale a la seconde pres.
456
! -------------------------------------------------
457
!
458
ih2=ireste/3600
459
ireste=ireste-3600*ih2
460
im2=ireste/60
461
ireste=ireste-60*im2
462
is2=ireste
463
write(cd2,fmt='(i8,3i2.2)') iamq2,ih2,im2,is2
464
end
465
subroutine dj_vers_amqhms(pdj,kaaaa,kmm,kqq,khh,kmn,ps)
466
! --------------------------------------------------------------------------
467
! **** *dj_vers_amqhms*
468
! --------------------------------------------------------------------------
469
! Auteur:
470
! -------
471
! 1999-08-17, J.M. Piriou.
472
!
473
! Modifications:
474
! --------------
475
!
476
! --------------------------------------------------------------------------
477
! En entree:
478
! pdj date julienne associ�e � la date gr�gorienne UTC d'entr�e
479
! En sortie:
480
! kaaaa ann�e (4 chiffres!)
481
! kmm   mois
482
! kqq   quanti�me du mois
483
! khh   heure
484
! kmn   minute
485
! ps    seconde
486
! --------------------------------------------------------------------------
487
!
488
!-------------------------------------------------
489
! Nombre de jours entre le 1er janvier 2000 � 0 UTC
490
! et la date julienne courante.
491
!-------------------------------------------------
492
!
493
494
495
IMPLICIT NONE
496
INTEGER(KIND=4) :: IDATE1
497
INTEGER(KIND=4) :: IDATE2
498
INTEGER(KIND=4) :: IECART
499
INTEGER(KIND=4) :: KAAAA
500
INTEGER(KIND=4) :: KHH
501
INTEGER(KIND=4) :: KMM
502
INTEGER(KIND=4) :: KMN
503
INTEGER(KIND=4) :: KNOUV
504
INTEGER(KIND=4) :: KQQ
505
REAL(KIND=8) :: PDJ
506
REAL(KIND=8) :: PS
507
REAL(KIND=8) :: ZECART
508
REAL(KIND=8) :: ZFRAC
509
zecart=pdj-2451544.5
510
!
511
!-------------------------------------------------
512
! Nombre entier de jours.
513
!-------------------------------------------------
514
!
515
zfrac=modulo(zecart, 1._8 )
516
iecart=nint(zecart-zfrac)
517
!
518
!-------------------------------------------------
519
! Date gr�gorienne associ�e.
520
!-------------------------------------------------
521
!
522
idate1=20000101
523
call daplusj(idate1,iecart,idate2)
524
kqq=mod(idate2,100)
525
knouv=idate2/100
526
kmm=mod(knouv,100)
527
kaaaa=knouv/100
528
!
529
!-------------------------------------------------
530
! Calcul de des heure, minute et seconde.
531
!-------------------------------------------------
532
!
533
zfrac=(zecart-real(iecart))*24.
534
khh=int(zfrac)
535
zfrac=(zfrac-real(khh))*60.
536
kmn=int(zfrac)
537
ps=(zfrac-real(kmn))*60.
538
end
539
subroutine dj_vers_amqhmsree(pdj,pgrer)
540
! --------------------------------------------------------------------------
541
! **** **
542
! --------------------------------------------------------------------------
543
! Auteur:
544
! -------
545
! 2002-11, J.M. Piriou.
546
!
547
! Modifications:
548
! --------------
549
!
550
! --------------------------------------------------------------------------
551
! En entree:
552
! pdj date julienne
553
! En sortie:
554
! pgrer date en clair au format AAAAMMQQ.HHMMSS
555
! --------------------------------------------------------------------------
556
!
557
558
IMPLICIT NONE
559
REAL(KIND=8), intent(in) :: PDJ
560
REAL(KIND=8), intent(out) :: pgrer
561
REAL(KIND=8) :: ZS
562
INTEGER(KIND=4) :: iaaaa,imm,iqq,ihh,imn
563
!
564
!-------------------------------------------------
565
! Conversion gr�gorien julien; cible 5 entiers et un r�el.
566
!-------------------------------------------------
567
!
568
call dj_vers_amqhms(pdj,iaaaa,imm,iqq,ihh,imn,zs)
569
!
570
!-------------------------------------------------
571
! On passe de ces 5 entiers et un r�el � un seul r�el.
572
!-------------------------------------------------
573
!
574
pgrer=real(iaaaa)*10000.+real(imm)*100. &
575
& + real(iqq)+real(ihh)/100. &
576
& + real(imn)/10000.+zs/1.E+06
577
end
578
subroutine amqhmsree_vers_dj(pgrer,pdj)
579
! --------------------------------------------------------------------------
580
! **** **
581
! --------------------------------------------------------------------------
582
! Auteur:
583
! -------
584
! 2002-11, J.M. Piriou.
585
!
586
! Modifications:
587
! --------------
588
!
589
! --------------------------------------------------------------------------
590
! En entree:
591
! pgrer date en clair au format AAAAMMQQ.HHMMSS
592
! En sortie:
593
! pdj date julienne associ�e � la date gr�gorienne
594
! --------------------------------------------------------------------------
595
!
596
597
IMPLICIT NONE
598
REAL(KIND=8), intent(out) :: PDJ
599
REAL(KIND=8), intent(in) :: pgrer
600
REAL(KIND=8) :: ZS,zloc
601
INTEGER(KIND=4) :: iaaaa,imm,iqq,ihh,imn,iloc
602
!
603
!-------------------------------------------------
604
! On passe de cette date gr�gorienne donn�e
605
! comme un seul r�el � 5 entiers et un r�el.
606
!-------------------------------------------------
607
!
608
iloc=int(pgrer)
609
iqq=mod(iloc,100)
610
iloc=iloc/100
611
imm=mod(iloc,100)
612
iaaaa=iloc/100
613
614
iloc=nint((pgrer-real(int(pgrer)))*1.E+06)
615
zs=real(mod(iloc,100))
616
iloc=iloc/100
617
imn=mod(iloc,100)
618
ihh=iloc/100
619
!
620
!-------------------------------------------------
621
! Conversion gr�gorien julien; cible 5 entiers et un r�el.
622
!-------------------------------------------------
623
!
624
call amqhms_vers_dj(iaaaa,imm,iqq,ihh,imn,zs,pdj)
625
end
626
subroutine ecartd(kdat1,kdat2,kopt,kgre)
627
! --------------------------------------------------------------------------
628
! **** *ECART* Ecart entre deux dates.
629
! --------------------------------------------------------------------------
630
! Auteur:
631
! -------
632
! 97-01-09, J.M. Piriou.
633
!
634
! Modifications:
635
! --------------
636
!
637
! --------------------------------------------------------------------------
638
! En entree: kopt option de precision sur les dates:
639
! 1 : au jour pres
640
! 2 : a l'heure pres
641
! 3 : a la minute pres
642
! 4 : a la seconde pres
643
! - si kopt=1 : kdat au format AAAAMMQQ
644
! - si kopt=2 : kdat au format AAAAMMQQHH
645
! - si kopt=3 : kdat au format AAAAMMQQHHMM
646
! - si kopt=4 : kdat au format AAAAMMQQHHMMSS
647
! kdat1 et kdat2 dates au format ci-dessus.
648
! En sortie:
649
! - si kopt=1 : kgre nombre de jours    entre kdat1 et kdat2
650
! - si kopt=2 : kgre nombre d'heures    entre kdat1 et kdat2
651
! - si kopt=3 : kgre nombre de minutes  entre kdat1 et kdat2
652
! - si kopt=4 : kgre nombre de secondes entre kdat1 et kdat2
653
! --------------------------------------------------------------------------
654
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
655
! ATTENTION A LA PRECISION:
656
! 1. Vous compilez les entiers sur 32 bits:
657
! Vous devez alors vous limiter a kopt <= 2.
658
! L'ecart entre les deux dates doit etre inferieur a
659
! - 2**31 heures si kopt=2
660
! - 2**31 jours si kopt=1
661
! 2. Vous compilez les entiers sur 64 bits:
662
! Vous pouvez utiliser toutes les valeurs de kopt.
663
! L'ecart entre les deux dates doit etre inferieur a
664
! - 2**63 secondes si kopt=4
665
! - 2**63 minutes si kopt=3
666
! - 2**63 heures si kopt=2
667
! - 2**63 jours si kopt=1
668
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
669
670
671
IMPLICIT NONE
672
INTEGER(KIND=4) :: IGRE1
673
INTEGER(KIND=4) :: IGRE2
674
INTEGER(KIND=4) :: KDAT1
675
INTEGER(KIND=4) :: KDAT2
676
INTEGER(KIND=4) :: KGRE
677
INTEGER(KIND=4) :: KOPT
678
call gregod(kdat1,kopt,igre1)
679
call gregod(kdat2,kopt,igre2)
680
kgre=igre2-igre1
681
end
682
subroutine ecartdj(k1,k2,kec)
683
! --------------------------------------------------------------
684
! **** *ecartdj* Ecart en jours entre deux dates.
685
! --------------------------------------------------------------
686
! Sujet:
687
! Arguments explicites:
688
! Arguments implicites:
689
! Methode:
690
! Externes:
691
! Auteur:   97-11, J.M. Piriou.
692
! Modifications:
693
! --------------------------------------------------------------
694
! En entree:
695
! k1 date de depart au format AAAAMMQQ.
696
! k2 date d'arrivee au format AAAAMMQQ.
697
! En sortie:
698
! kec: nombre de jours entre les deux dates.
699
! --------------------------------------------------------------
700
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
701
! ATTENTION A LA PRECISION:
702
! Cette routine est utilisable avec des entiers 32 bits,
703
! si l'ecart entre les deux dates est inferieur a 2**31 jours,
704
! soit 5879489 ans!...
705
!
706
! Au-dela de cette duree, les entiers doivent etre 64 bits.
707
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
708
!
709
! -------------------------------------------------
710
! Ecart entre les deux dates au jour pres.
711
! -------------------------------------------------
712
!
713
714
715
IMPLICIT NONE
716
INTEGER(KIND=4) :: K1
717
INTEGER(KIND=4) :: K2
718
INTEGER(KIND=4) :: KEC
719
call ecartd(k1,k2,1,kec)
720
end
721
subroutine ecartds(cd1,cd2,kec)
722
! --------------------------------------------------------------
723
! **** *ecartds* Ecart en secondes entre deux dates.
724
! --------------------------------------------------------------
725
! Sujet:
726
! Arguments explicites:
727
! Arguments implicites:
728
! Methode:
729
! Externes:
730
! Auteur:   97-11, J.M. Piriou.
731
! Modifications:
732
! --------------------------------------------------------------
733
! En entree:
734
! cd1 date de depart au format 'AAAAMMQQHHNNSS'.
735
! cd2 date d'arrivee au format 'AAAAMMQQHHNNSS'.
736
! En sortie:
737
! kec: nombre de secondes entre les deux dates.
738
! --------------------------------------------------------------
739
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
740
! ATTENTION A LA PRECISION:
741
! Cette routine est utilisable avec des entiers 32 bits,
742
! si l'ecart entre les deux dates est inferieur a 2**31 secondes,
743
! soit 68 ans!...
744
!
745
! Au-dela de cette duree, les entiers doivent etre 64 bits.
746
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
747
748
749
IMPLICIT NONE
750
INTEGER(KIND=4) :: IAMQ1
751
INTEGER(KIND=4) :: IAMQ2
752
INTEGER(KIND=4) :: IH1
753
INTEGER(KIND=4) :: IH2
754
INTEGER(KIND=4) :: IM1
755
INTEGER(KIND=4) :: IM2
756
INTEGER(KIND=4) :: IS1
757
INTEGER(KIND=4) :: IS2
758
INTEGER(KIND=4) :: KEC
759
INTEGER(KIND=4) :: KECQ
760
character*(*) cd1,cd2
761
!
762
! -------------------------------------------------
763
! On lit les dates sur des entiers.
764
! -------------------------------------------------
765
!
766
read(cd1,fmt='(i8,3i2)') iamq1,ih1,im1,is1
767
read(cd2,fmt='(i8,3i2)') iamq2,ih2,im2,is2
768
!
769
! -------------------------------------------------
770
! Ecart entre les deux dates au jour pres.
771
! -------------------------------------------------
772
!
773
call ecartd(iamq1,iamq2,1,kecq)
774
!
775
! -------------------------------------------------
776
! Ecart en secondes.
777
! -------------------------------------------------
778
!
779
kec=kecq*86400+(ih2-ih1)*3600+(im2-im1)*60+is2-is1
780
end
781
subroutine gregod(kdat,kopt,kgre)
782
! --------------------------------------------------------------------------
783
! **** *GREGOD *  - Conversion Date > Ecart par rapport a une date fixe.
784
! --------------------------------------------------------------------------
785
! Auteur:
786
! -------
787
! 92-05-27, J.M. Piriou.
788
!
789
! Modifications:
790
! --------------
791
!
792
! --------------------------------------------------------------------------
793
! En entree: kopt option de precision sur les dates:
794
! 1 : au jour pres
795
! 2 : a l'heure pres
796
! 3 : a la minute pres
797
! 4 : a la seconde pres
798
! - si kopt=1 : kdat au format AAAAMMQQ
799
! - si kopt=2 : kdat au format AAAAMMQQHH
800
! - si kopt=3 : kdat au format AAAAMMQQHHMM
801
! - si kopt=4 : kdat au format AAAAMMQQHHMMSS
802
! En sortie:
803
! - si kopt=1 : kgre nombre de jours    entre 19000101       et kdat
804
! - si kopt=2 : kgre nombre d'heures    entre 1900010100     et kdat
805
! - si kopt=3 : kgre nombre de minutes  entre 190001010000   et kdat
806
! - si kopt=4 : kgre nombre de secondes entre 19000101000000 et kdat
807
! --------------------------------------------------------------------------
808
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
809
! ATTENTION A LA PRECISION:
810
! 1. Vous compilez les entiers sur 32 bits:
811
! Vous devez alors vous limiter a kopt <= 2.
812
! 2. Vous compilez les entiers sur 64 bits:
813
! Vous pouvez utiliser toutes les valeurs de kopt.
814
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
815
816
817
IMPLICIT NONE
818
INTEGER(KIND=4) :: idebm(12)
819
INTEGER(KIND=4) :: I0
820
INTEGER(KIND=4) :: IA100
821
INTEGER(KIND=4) :: IA4
822
INTEGER(KIND=4) :: IA400
823
INTEGER(KIND=4) :: IAAAA
824
INTEGER(KIND=4) :: IBISSEXT
825
INTEGER(KIND=4) :: ICONV
826
INTEGER(KIND=4) :: IFRJOUR
827
INTEGER(KIND=4) :: II
828
INTEGER(KIND=4) :: II1
829
INTEGER(KIND=4) :: IJOURP
830
INTEGER(KIND=4) :: IMM
831
INTEGER(KIND=4) :: IN
832
INTEGER(KIND=4) :: IN1
833
INTEGER(KIND=4) :: IN2
834
INTEGER(KIND=4) :: IQQ
835
INTEGER(KIND=4) :: KDAT
836
INTEGER(KIND=4) :: KGRE
837
INTEGER(KIND=4) :: KOPT
838
data idebm/0,31,59,90,120,151,181,212,243,273,304,334/
839
!
840
! --------------------------------------------------------------------------
841
! **      1. Calcul du nb de jours separant ki2 du 1er janv 1900
842
!
843
! *       1.1 Extraction des quantieme, mois et annee
844
if(kopt == 1) then
845
  ! Date de type AAAAMMQQ
846
  iconv=1
847
  ifrjour=0
848
  ii=kdat
849
elseif(kopt == 2) then
850
  ! Date de type AAAAMMQQHH
851
  iconv=24
852
  ifrjour=mod(kdat,100)
853
  ii=kdat/100
854
elseif(kopt == 3) then
855
  ! Date de type AAAAMMQQHHMM
856
  iconv=1440
857
  ifrjour=mod(kdat,100)
858
  ii=kdat/100
859
  ifrjour=ifrjour+mod(ii,100)*60
860
  ii=ii/100
861
elseif(kopt == 4) then
862
  ! Date de type AAAAMMQQHHMMSS
863
  iconv=86400
864
  ifrjour=mod(kdat,100)
865
  ii=kdat/100
866
  ifrjour=ifrjour+mod(ii,100)*60
867
  ii=ii/100
868
  ifrjour=ifrjour+mod(ii,100)*3600
869
  ii=ii/100
870
else
871
  ! Cas d'entree erronee de l'utilisateur.
872
  print*,'GREGODR/ERREUR: argument kopt errone!...'
873
  print*,kopt
874
  stop 'call abort'
875
endif
876
iqq=ii-(ii/100)*100
877
in=(ii-iqq)/100
878
imm=in-(in/100)*100
879
iaaaa=(in-imm)/100
880
! *       1.2 L'annee est-elle bissextile?
881
! Une annee est bissextile ssi elle est
882
! (mult de 4 et non mult de 100) ou (mult de 400)
883
iaaaa=iaaaa
884
ia400=400*(iaaaa/400)
885
ia100=100*(iaaaa/100)
886
ia4=4*(iaaaa/4)
887
if((iaaaa == ia400).or.((iaaaa == ia4).and.(iaaaa /= ia100)))then
888
  ibissext=1
889
else
890
  ibissext=0
891
endif
892
if ((ibissext == 1).and.(imm > 2)) then
893
  ijourp=1
894
else
895
  ijourp=0
896
endif
897
! *       1.3 Nombre de jours ecoules depuis le 1er janv
898
if(imm > 12) then
899
  print*,'GREGODR/ERREUR: mois errone.'
900
  print*,imm
901
  stop 'call abort'
902
endif
903
in2=idebm(imm)+ijourp+iqq-1
904
! *       1.4 Calcul du nb de jours separant les 1er janvier de ii et 1900
905
i0=1900
906
in2=in2+365*(iaaaa-i0)+int((iaaaa-1)/4)-int((i0-1)/4)&
907
&-int((iaaaa-1)/100)+int((i0-1)/100)&
908
&+int((iaaaa-1)/400)-int((i0-1)/400)
909
! --------------------------------------------------------------------------
910
! **      2. Calcul du nb de jours separant ii1 du 1er janv 1900
911
!
912
! *       2.1 Extraction des quantieme, mois et annee
913
ii1=19000101
914
ii=ii1
915
iqq=ii-(ii/100)*100
916
in=(ii-iqq)/100
917
imm=in-(in/100)*100
918
iaaaa=(in-imm)/100
919
! *       2.2 L'annee est-elle bissextile?
920
! Une annee est bissextile ssi elle est
921
! (mult de 4 et non mult de 100) ou (mult de 400)
922
iaaaa=iaaaa
923
ia400=400*(iaaaa/400)
924
ia100=100*(iaaaa/100)
925
ia4=4*(iaaaa/4)
926
if((iaaaa == ia400).or.((iaaaa == ia4).and.(iaaaa /= ia100)))then
927
  ibissext=1
928
else
929
  ibissext=0
930
endif
931
if ((ibissext == 1).and.(imm > 2)) then
932
  ijourp=1
933
else
934
  ijourp=0
935
endif
936
! *       2.3 Nombre de jours ecoules depuis le 1er janv
937
in1=idebm(imm)+ijourp+iqq-1
938
! *       2.4 Calcul du nb de jours separant les 1er janvier de ii et 1900
939
i0=1900
940
in1=in1+365*(iaaaa-i0)+int((iaaaa-1)/4)-int((i0-1)/4)&
941
&-int((iaaaa-1)/100)+int((i0-1)/100)&
942
&+int((iaaaa-1)/400)-int((i0-1)/400)
943
! --------------------------------------------------------------------------
944
! **      3. Difference in2-in1
945
kgre=(in2-in1)*iconv+ifrjour
946
end
947
subroutine gregoi(kgre,kopt,kdat)
948
! --------------------------------------------------------------------------
949
! **** *GREGOI *  - Conversion Ecart par rapport a une date fixe > Date.
950
! --------------------------------------------------------------------------
951
! Auteur:
952
! -------
953
! 92-05-27, J.M. Piriou.
954
!
955
! Modifications:
956
! --------------
957
!
958
! --------------------------------------------------------------------------
959
! En entree: kopt option de precision sur les dates:
960
! 1 : au jour pres
961
! 2 : a l'heure pres
962
! 3 : a la minute pres
963
! 4 : a la seconde pres
964
! - si kopt=1 : kgre nombre de jours    entre 19000101       et kdat
965
! - si kopt=2 : kgre nombre d'heures    entre 1900010100     et kdat
966
! - si kopt=3 : kgre nombre de minutes  entre 190001010000   et kdat
967
! - si kopt=4 : kgre nombre de secondes entre 19000101000000 et kdat
968
! En sortie:
969
! - si kopt=1 : kdat au format AAAAMMQQ
970
! - si kopt=2 : kdat au format AAAAMMQQHH
971
! - si kopt=3 : kdat au format AAAAMMQQHHMM
972
! - si kopt=4 : kdat au format AAAAMMQQHHMMSS
973
! --------------------------------------------------------------------------
974
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
975
! ATTENTION A LA PRECISION:
976
! 1. Vous compilez les entiers sur 32 bits:
977
! Vous devez alors vous limiter a kopt <= 2.
978
! 2. Vous compilez les entiers sur 64 bits:
979
! Vous pouvez utiliser toutes les valeurs de kopt.
980
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
981
982
983
IMPLICIT NONE
984
INTEGER(KIND=4) :: ijours(12)
985
INTEGER(KIND=4) :: IA100
986
INTEGER(KIND=4) :: IA4
987
INTEGER(KIND=4) :: IA400
988
INTEGER(KIND=4) :: IAAAA
989
INTEGER(KIND=4) :: IBISSEXT
990
INTEGER(KIND=4) :: ICONV
991
INTEGER(KIND=4) :: IDAT
992
INTEGER(KIND=4) :: IEC
993
INTEGER(KIND=4) :: IECI
994
INTEGER(KIND=4) :: IGII2P
995
INTEGER(KIND=4) :: II2P
996
INTEGER(KIND=4) :: IMM
997
INTEGER(KIND=4) :: IMOD
998
INTEGER(KIND=4) :: IQQ
999
INTEGER(KIND=4) :: KDAT
1000
INTEGER(KIND=4) :: KGRE
1001
INTEGER(KIND=4) :: KOPT
1002
REAL(KIND=8) :: ZARRDEC
1003
data ijours/31,28,31,30,31,30,31,31,30,31,30,31/
1004
! --------------------------------------------------------------------------
1005
! **   On determine la date approximative d'arrivee en annees decimales
1006
!
1007
if(kopt == 1) then
1008
  ! Date de type AAAAMMQQ
1009
  iconv=1
1010
elseif(kopt == 2) then
1011
  ! Date de type AAAAMMQQHH
1012
  iconv=24
1013
elseif(kopt == 3) then
1014
  ! Date de type AAAAMMQQHHMM
1015
  iconv=1440
1016
elseif(kopt == 4) then
1017
  ! Date de type AAAAMMQQHHMMSS
1018
  iconv=86400
1019
else
1020
  ! Cas d'entree erronee de l'utilisateur.
1021
  print*,'GREGOI/ERREUR: argument kopt errone!...'
1022
  print*,kopt
1023
  stop 'call abort'
1024
endif
1025
zarrdec=1900.+(real(kgre)/real(iconv)-5.)/365.2425
1026
! --------------------------------------------------------------------------
1027
! **   On determine la date en clair ii2p associee a la date decimale
1028
!
1029
iaaaa=int(zarrdec)
1030
zarrdec=12.*(zarrdec-real(iaaaa))
1031
imm=int(zarrdec)+1
1032
zarrdec=28.*(zarrdec-real(imm-1))
1033
iqq=int(zarrdec)+1
1034
ii2p=iqq+imm*100+iaaaa*10000
1035
! --------------------------------------------------------------------------
1036
! **   On calcule le nombre de jours separant 19000101 de ii2p
1037
!
1038
call gregod(ii2p,1,igii2p)
1039
imod=mod(kgre,iconv)
1040
if(imod < 0) imod=imod+iconv
1041
iec=(kgre-imod)/iconv-igii2p
1042
! --------------------------------------------------------------------------
1043
! **   On avance de iec jours par rapport a ii2p
1044
!
1045
! *       L'annee est-elle bissextile?
1046
! Une annee est bissextile ssi elle est
1047
! (mult de 4 et non mult de 100) ou (mult de 400)
1048
iaaaa=iaaaa
1049
ia400=400*(iaaaa/400)
1050
ia100=100*(iaaaa/100)
1051
ia4=4*(iaaaa/4)
1052
if((iaaaa == ia400).or.((iaaaa == ia4).and.(iaaaa /= ia100)))then
1053
  ibissext=1
1054
else
1055
  ibissext=0
1056
endif
1057
! Si oui, 29 jours en fevrier
1058
if(ibissext == 1) ijours(2)=29
1059
! *       Boucle sur les jours
1060
do ieci=1,iec
1061
  iqq=iqq+1
1062
  if(iqq > ijours(imm)) then
1063
    iqq=1
1064
    imm=imm+1
1065
  endif
1066
  if(imm > 12) then
1067
    imm=1
1068
    iaaaa=iaaaa+1
1069
  endif
1070
enddo
1071
! --------------------------------------------------------------------------
1072
! **   On met en forme la date finale
1073
!
1074
idat=iqq+imm*100+iaaaa*10000
1075
if(kopt == 2) then
1076
  imod=mod(kgre,iconv)
1077
  if(imod < 0) imod=imod+iconv
1078
  idat=idat*100+imod
1079
elseif(kopt == 3) then
1080
  imod=mod(kgre,iconv)
1081
  if(imod < 0) imod=imod+iconv
1082
  idat=idat*100+imod/60
1083
  imod=mod(imod,60)
1084
  idat=idat*100+imod
1085
elseif(kopt == 4) then
1086
  imod=mod(kgre,iconv)
1087
  if(imod < 0) imod=imod+iconv
1088
  idat=idat*100+imod/3600
1089
  imod=mod(imod,3600)
1090
  idat=idat*100+imod/60
1091
  imod=mod(imod,60)
1092
  idat=idat*100+imod
1093
endif
1094
kdat=idat
1095
end
1096
function ijoursem(kdat)
1097
! --------------------------------------------------------------------------
1098
! **** *IJOURSEM* Jour de la semaine de la date d'entree.
1099
! --------------------------------------------------------------------------
1100
! Auteur:
1101
! -------
1102
! 94-10-31, J.M. Piriou.
1103
!
1104
! Modifications:
1105
! --------------
1106
!
1107
! --------------------------------------------------------------------------
1108
! En entree:
1109
! kdat1 au format AAAAMMQQ
1110
! En sortie:
1111
! ijour=0 si dimanche, 1 lundi, ..., 6 samedi.
1112
! --------------------------------------------------------------------------
1113
1114
1115
IMPLICIT NONE
1116
INTEGER(KIND=4) :: IDATDIM
1117
INTEGER(KIND=4) :: IECART
1118
INTEGER(KIND=4) :: IGRE
1119
INTEGER(KIND=4) :: IGREDIM
1120
INTEGER(KIND=4) :: KDAT
1121
INTEGER(KIND=4) :: ijoursem
1122
call gregod(kdat,1,igre)
1123
idatdim=19941030 ! cette date etait un dimanche.
1124
call gregod(idatdim,1,igredim)
1125
iecart=igre-igredim
1126
ijoursem=modulo(iecart,7)
1127
end
1128
subroutine qqmmaa(kdatd,cdresd)
1129
! --------------------------------------------------------------------------
1130
! **** *QQMMAA *  - Conversion d'un entier type AAAAQQMM vers une date en clair.
1131
! --------------------------------------------------------------------------
1132
! Auteur:
1133
! -------
1134
! 92-05-27, J.M. Piriou.
1135
!
1136
! Modifications:
1137
! --------------
1138
!
1139
! --------------------------------------------------------------------------
1140
1141
1142
IMPLICIT NONE
1143
INTEGER(KIND=4) :: IAN
1144
INTEGER(KIND=4) :: IGRE
1145
INTEGER(KIND=4) :: ILOC
1146
INTEGER(KIND=4) :: IMM
1147
INTEGER(KIND=4) :: IQQ
1148
INTEGER(KIND=4) :: KDATD
1149
character*(*) cdresd
1150
character*03 cljour
1151
iqq=mod(kdatd,100)
1152
iloc=kdatd/100
1153
imm=mod(iloc,100)
1154
ian=iloc/100
1155
call gregod(kdatd,1,igre)
1156
igre=mod(igre,7)
1157
if(igre == 0) then
1158
  cljour='Lun'
1159
elseif(igre == 1) then
1160
  cljour='Mar'
1161
elseif(igre == 2) then
1162
  cljour='Mer'
1163
elseif(igre == 3) then
1164
  cljour='Jeu'
1165
elseif(igre == 4) then
1166
  cljour='Ven'
1167
elseif(igre == 5) then
1168
  cljour='Sam'
1169
elseif(igre == 6) then
1170
  cljour='Dim'
1171
endif
1172
write(cdresd,fmt='(a3,a1,i2,a1,i2.2,a1,i4.4)')&
1173
&cljour,' ',iqq,'.',imm,'.',ian
1174
end
1175
subroutine quant(kdate,kquant)
1176
! --------------------------------------------------------------
1177
! **** *quant* Quantieme de l'annee d'une date donnee.
1178
! --------------------------------------------------------------
1179
! Sujet:
1180
! Arguments explicites:
1181
! Arguments implicites:
1182
! Methode:
1183
! Externes:
1184
! Auteur:   1999-04, J.M. Piriou.
1185
! Modifications:
1186
! --------------------------------------------------------------
1187
! En entree:
1188
! kdate date au format AAAAMMQQ.
1189
! En sortie:
1190
! quantieme de l'annee (1 le 1er janvier, 32 le 1er fevrier, etc...)
1191
! --------------------------------------------------------------
1192
1193
1194
IMPLICIT NONE
1195
INTEGER(KIND=4) :: IBASE
1196
INTEGER(KIND=4) :: IEC
1197
INTEGER(KIND=4) :: KDATE
1198
INTEGER(KIND=4) :: KQUANT
1199
ibase=10000*(kdate/10000)+0101 ! 1er janvier de l'annee courante.
1200
call ecartdj(ibase,kdate,iec)
1201
kquant=iec+1
1202
end