75 INTEGER(KIND=4) :: kan,kmo,kqu,ihe,imi,imiv,ihev,iquv,imov,ianv,ilze
76 REAL(KIND=8) :: psssss,pstati
78 REAL(KIND=8) :: zsssss,zdj,zsv
80 character*200 clzue,clze,clech
90 zsssss=(zsssss-
real(ihe))*60.
92 zsssss=zsssss-
real(imi)
96 if(pstati < 3600.)
then
102 zech=pstati/60. ; clzue=
'mn'
103 elseif(pstati < 259200.)
then
109 zech=pstati/3600. ; clzue=
'h'
116 zech=pstati/86400. ; clzue=
'j'
121 write(clze,fmt=
'(f9.2)') zech
126 if(clze(len_trim(clze)-2:len_trim(clze)) ==
'.00')
then
127 clze=clze(1:len_trim(clze)-3)
131 clech=clze(1:ilze)//clzue
138 if(imi == 0 .and. imiv == 0)
then
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'
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'
160 subroutine datc(kaaaa,kmm,kqq,khh,kmi,kss,kjs,cdjs,cddt)
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
204 character*200 clgol1,clgol2,clgol3
207 character*3 cljour(0:6)
208 data cljour/
'Dim',
'Lun',
'Mar',
'Mer',
'Jeu',
'Ven',
'Sam'/
217 call date_and_time(clgol1,clgol2,clgol3,idatat)
223 read(clgol1,fmt=
'(i4,2i2)') kaaaa,kmm,kqq
229 read(clgol2,fmt=
'(2i2)') khh,kmi
230 read(clgol2(5:),fmt=*) zs
232 read(clgol1,fmt=
'(i8)') iaaaammqq
238 kjs=ijoursem(iaaaammqq)
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
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
285 idate2=kaaaa*10000+kmm*100+kqq
292 call ecartdj(idate1,idate2,iecart)
298 pdj=2451545.0- 0.5 +
real(iecart)+
real(khh)/24. &
299 & +real(kmn)/1440.+ps/86400.
301 subroutine daplus(kdat1,kopt,kdelt,kdat2)
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)
351 call gregoi(igre,kopt,kdat2)
383 INTEGER(KIND=4) :: K1
384 INTEGER(KIND=4) :: K2
385 INTEGER(KIND=4) :: KEC
388 subroutine dapluss(cd1,kec,cd2)
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
436 read(cd1,fmt=
'(i8,3i2)') iamq1,ih1,im1,is1
443 isec=ih1*3600+im1*60+is1
445 ireste=modulo(idelta,86400)
446 iecjours=(idelta-ireste)/86400
452 call daplus(iamq1,1,iecjours,iamq2)
459 ireste=ireste-3600*ih2
463 write(cd2,fmt=
'(i8,3i2.2)') iamq2,ih2,im2,is2
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
507 REAL(KIND=8) :: ZECART
508 REAL(KIND=8) :: ZFRAC
515 zfrac=modulo(zecart, 1._8 )
516 iecart=nint(zecart-zfrac)
523 call daplusj(idate1,iecart,idate2)
533 zfrac=(zecart-
real(iecart))*24.
535 zfrac=(zfrac-
real(khh))*60.
537 ps=(zfrac-
real(kmn))*60.
559 REAL(KIND=8),
intent(in) :: PDJ
560 REAL(KIND=8),
intent(out) :: pgrer
562 INTEGER(KIND=4) :: iaaaa,imm,iqq,ihh,imn
574 pgrer=
real(iaaaa)*10000.+
real(imm)*100. &
575 & + real(iqq)+real(ihh)/100. &
576 & + real(imn)/10000.+zs/1.E+06
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
614 iloc=nint((pgrer-
real(int(pgrer)))*1.e+06)
615 zs=
real(mod(iloc,100))
626 subroutine ecartd(kdat1,kdat2,kopt,kgre)
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)
716 INTEGER(KIND=4) :: K1
717 INTEGER(KIND=4) :: K2
718 INTEGER(KIND=4) :: KEC
721 subroutine ecartds(cd1,cd2,kec)
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
766 read(cd1,fmt=
'(i8,3i2)') iamq1,ih1,im1,is1
767 read(cd2,fmt=
'(i8,3i2)') iamq2,ih2,im2,is2
773 call ecartd(iamq1,iamq2,1,kecq)
779 kec=kecq*86400+(ih2-ih1)*3600+(im2-im1)*60+is2-is1
781 subroutine gregod(kdat,kopt,kgre)
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/
849 elseif(kopt == 2)
then
852 ifrjour=mod(kdat,100)
854 elseif(kopt == 3)
then
857 ifrjour=mod(kdat,100)
859 ifrjour=ifrjour+mod(ii,100)*60
861 elseif(kopt == 4)
then
864 ifrjour=mod(kdat,100)
866 ifrjour=ifrjour+mod(ii,100)*60
868 ifrjour=ifrjour+mod(ii,100)*3600
872 print*,
'GREGODR/ERREUR: argument kopt errone!...'
884 ia400=400*(iaaaa/400)
885 ia100=100*(iaaaa/100)
887 if((iaaaa == ia400).or.((iaaaa == ia4).and.(iaaaa /= ia100)))
then
892 if ((ibissext == 1).and.(imm > 2))
then
899 print*,
'GREGODR/ERREUR: mois errone.'
903 in2=idebm(imm)+ijourp+iqq-1
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)
923 ia400=400*(iaaaa/400)
924 ia100=100*(iaaaa/100)
926 if((iaaaa == ia400).or.((iaaaa == ia4).and.(iaaaa /= ia100)))
then
931 if ((ibissext == 1).and.(imm > 2))
then
937 in1=idebm(imm)+ijourp+iqq-1
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)
945 kgre=(in2-in1)*iconv+ifrjour
947 subroutine gregoi(kgre,kopt,kdat)
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/
1010 elseif(kopt == 2)
then
1013 elseif(kopt == 3)
then
1016 elseif(kopt == 4)
then
1021 print*,
'GREGOI/ERREUR: argument kopt errone!...'
1025 zarrdec=1900.+(
real(kgre)/
real(iconv)-5.)/365.2425
1030 zarrdec=12.*(zarrdec-
real(iaaaa))
1032 zarrdec=28.*(zarrdec-
real(imm-1))
1034 ii2p=iqq+imm*100+iaaaa*10000
1038 call gregod(ii2p,1,igii2p)
1039 imod=mod(kgre,iconv)
1040 if(imod < 0) imod=imod+iconv
1041 iec=(kgre-imod)/iconv-igii2p
1049 ia400=400*(iaaaa/400)
1050 ia100=100*(iaaaa/100)
1052 if((iaaaa == ia400).or.((iaaaa == ia4).and.(iaaaa /= ia100)))
then
1058 if(ibissext == 1) ijours(2)=29
1062 if(iqq > ijours(imm))
then
1074 idat=iqq+imm*100+iaaaa*10000
1076 imod=mod(kgre,iconv)
1077 if(imod < 0) imod=imod+iconv
1079 elseif(kopt == 3)
then
1080 imod=mod(kgre,iconv)
1081 if(imod < 0) imod=imod+iconv
1082 idat=idat*100+imod/60
1085 elseif(kopt == 4)
then
1086 imod=mod(kgre,iconv)
1087 if(imod < 0) imod=imod+iconv
1088 idat=idat*100+imod/3600
1090 idat=idat*100+imod/60
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
1124 call gregod(idatdim,1,igredim)
1126 ijoursem=modulo(iecart,7)
1128 subroutine qqmmaa(kdatd,cdresd)
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
1155 call gregod(kdatd,1,igre)
1159 elseif(igre == 1)
then
1161 elseif(igre == 2)
then
1163 elseif(igre == 3)
then
1165 elseif(igre == 4)
then
1167 elseif(igre == 5)
then
1169 elseif(igre == 6)
then
1172 write(cdresd,fmt=
'(a3,a1,i2,a1,i2.2,a1,i4.4)')&
1173 &cljour,
' ',iqq,
'.',imm,
'.',ian
1175 subroutine quant(kdate,kquant)
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
subroutine quant(kdate, kquant)
subroutine daplus(kdat1, kopt, kdelt, kdat2)
subroutine amqhms_vers_dj(kaaaa, kmm, kqq, khh, kmn, ps, pdj)
subroutine ecartd(kdat1, kdat2, kopt, kgre)
subroutine dj_vers_amqhmsree(pdj, pgrer)
subroutine dj_vers_amqhms(pdj, kaaaa, kmm, kqq, khh, kmn, ps)
subroutine amqhmsree_vers_dj(pgrer, pdj)
subroutine daplusj(k1, kec, k2)
integer(kind=4) function ijoursem(kdat)
subroutine date_plus_ech(kan, kmo, kqu, psssss, pstati, cdtit)
subroutine gregoi(kgre, kopt, kdat)
subroutine qqmmaa(kdatd, cdresd)
subroutine datc(kaaaa, kmm, kqq, khh, kmi, kss, kjs, cdjs, cddt)
subroutine ecartds(cd1, cd2, kec)
subroutine dapluss(cd1, kec, cd2)
subroutine ecartdj(k1, k2, kec)
subroutine gregod(kdat, kopt, kgre)