Ignore:
Timestamp:
Aug 2, 2024, 9:58:25 PM (7 weeks ago)
Author:
abarral
Message:

Put dimensions.h and paramet.h into modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/phylmd/rrtm/dates.F90

    r5158 r5159  
    11subroutine dates_demo
    22! --------------------------------------------------------------
    3 !
     3
    44! Conseils a l'utilisateur:
    5 !
     5
    66! 1. VOUS COMPILEZ LES ENTIERS EN 32 BITS:
    77! Utilisez alors les routines
     
    1717! les parametres subsequents assurant que seuls des entiers
    1818! representables en 32 bits y soient utilises.
    19 !
     19
    2020! 2. VOUS COMPILEZ LES ENTIERS EN 64 BITS:
    2121! Vous pouvez alors utiliser toutes les routines ci-dessus
     
    3030! - amqhmsree_vers_dj: Conversion date gr�gorienne (en un seul r�el) > date julienne.
    3131! - dj_vers_amqhmsree: Conversion date julienne > date gr�gorienne (en un seul r�el).
    32 !
    33 ! --------------------------------------------------------------
    34 !
     32
     33! --------------------------------------------------------------
     34
    3535! D�finition des dates employ�es ci-dessous:
    36 !
     36
    3737! Date julienne DJ:
    3838!       Elle est compos�e d'un r�el.
    3939!       R1: Ce r�el cro�t de 1 tous les jours,
    4040!               et vaut 2451545.0 le 1er janvier 2000 � 12 UTC.
    41 !
     41
    4242! Date gr�gorienne "en clair" AMQHMS:
    4343!       Elle est compos�e de 5 entiers et d'un r�el.
     
    8080character*200 clzue,clze,clech
    8181character *(*) cdtit
    82 !
     82
    8383!-------------------------------------------------
    8484! Date de validit�.
    8585!-------------------------------------------------
    86 !
     86
    8787zs=0.
    8888zsssss=psssss/3600.
     
    9595call dj_vers_amqhms(zdj,ianv,imov,iquv,ihev,imiv,zsv) ! date gr�gorienne de validit�.
    9696if(pstati < 3600.) then
    97 !
     97
    9898!-------------------------------------------------
    9999! Ech�ance en minutes.
    100100!-------------------------------------------------
    101 !
     101
    102102    zech=pstati/60. ; clzue='mn'
    103103elseif(pstati < 259200.) then
    104 !
     104
    105105!-------------------------------------------------
    106106! Ech�ance en heures.
    107107!-------------------------------------------------
    108 !
     108
    109109    zech=pstati/3600. ; clzue='h'
    110110else
    111 !
     111
    112112!-------------------------------------------------
    113113! Ech�ance en jours.
    114114!-------------------------------------------------
    115 !
     115
    116116    zech=pstati/86400. ; clzue='j'
    117117endif
    118 !
     118
    119119! Affichage de l'echeance avec deux chiffres apres la virgule.
    120 !
     120
    121121write(clze,fmt='(f9.2)') zech
    122 !
     122
    123123! Si l'echeance est voisine d'un entier a mieux que 10**-2 pres,
    124124! on l'affiche au format entier.
    125 !
     125
    126126if(clze(len_trim(clze)-2:len_trim(clze)) == '.00') then
    127127    clze=clze(1:len_trim(clze)-3)
     
    130130ilze=len_trim(clze)
    131131clech=clze(1:ilze)//clzue
    132 !
     132
    133133!-------------------------------------------------
    134134! Titre 3, de type
    135135! BASE 2000.01.15 00:00 +72H VALID 2000.01.18 15:00.
    136136!-------------------------------------------------
    137 !
     137
    138138if(imi == 0 .and. imiv == 0) then
    139 !
     139
    140140!-------------------------------------------------
    141141! Les minutes de base et validit� sont nulles.
    142142! On ne les affiche pas.
    143143!-------------------------------------------------
    144 !
     144
    145145    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)')&
    146146    &'BASE ',kqu,'.',kmo,'.',kan,' ',ihe,'h UTC + ',clech(1:len_trim(clech))&
    147147    &,', VALID ',iquv,'.',imov,'.',ianv,' ',ihev,'h UTC'
    148148else
    149 !
     149
    150150!-------------------------------------------------
    151151! Les minutes de base ou validit� sont non nulles.
    152152! On les affiche.
    153153!-------------------------------------------------
    154 !
     154
    155155    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)')&
    156156    &'BASE ',kqu,'.',kmo,'.',kan,' ',ihe,':',imi,' UTC + ',clech(1:len_trim(clech))&
     
    207207character*3 cljour(0:6)
    208208data cljour/'Dim','Lun','Mar','Mer','Jeu','Ven','Sam'/
    209 !
     209
    210210!-------------------------------------------------
    211211! Date courante � la f90.
    212212!-------------------------------------------------
    213 !
     213
    214214clgol1=' '
    215215clgol2=' '
    216216clgol3=' '
    217217call date_and_time(clgol1,clgol2,clgol3,idatat)
    218 !
     218
    219219!-------------------------------------------------
    220220! clgol1 est du type "AAAAMMQQ".
    221221!-------------------------------------------------
    222 !
     222
    223223read(clgol1,fmt='(i4,2i2)') kaaaa,kmm,kqq
    224 !
     224
    225225!-------------------------------------------------
    226226! clgol2 est du type "HHMMSS.SSS".
    227227!-------------------------------------------------
    228 !
     228
    229229read(clgol2,fmt='(2i2)') khh,kmi
    230230read(clgol2(5:),fmt=*) zs
    231231kss=nint(zs)
    232232read(clgol1,fmt='(i8)') iaaaammqq
    233 !
     233
    234234!-------------------------------------------------
    235235! Jour de la semaine.
    236236!-------------------------------------------------
    237 !
     237
    238238kjs=ijoursem(iaaaammqq)
    239239cdjs=cljour(kjs)
    240 !
     240
    241241!-------------------------------------------------
    242242! Date totale.
    243243!-------------------------------------------------
    244 !
     244
    245245write(cddt,fmt='(i4.4,a,2(i2.2,a),2a,i2.2,a,i2.2,a,i2.2)') &
    246246&kaaaa,'_',kmm,'_',kqq,'_',cdjs,'_',khh,':',kmi,':',kss
     
    253253! -------
    254254! 1999-08-17, J.M. Piriou.
    255 !
     255
    256256! Modifications:
    257257! --------------
    258 !
     258
    259259! --------------------------------------------------------------------------
    260260! En entree:
     
    284284idate1=20000101
    285285idate2=kaaaa*10000+kmm*100+kqq
    286 !
     286
    287287!-------------------------------------------------
    288288! Nombre de jours �coul�s entre la date
    289289! d'entr�e � 0h UTC et le 1er janvier 2000 � 0h UTC.
    290290!-------------------------------------------------
    291 !
     291
    292292call ecartdj(idate1,idate2,iecart)
    293 !
     293
    294294!-------------------------------------------------
    295295! Date julienne.
    296296!-------------------------------------------------
    297 !
     297
    298298pdj=2451545.0- 0.5 +real(iecart)+real(khh)/24. &
    299299& +real(kmn)/1440.+ps/86400.
     
    306306! -------
    307307! 94-10-31, J.M. Piriou.
    308 !
     308
    309309! Modifications:
    310310! --------------
    311 !
     311
    312312! --------------------------------------------------------------------------
    313313! En entree:
     
    326326! En sortie:
    327327! kdat2 date finale.
    328 !
     328
    329329! --------------------------------------------------------------------------
    330330! Exemple: call DAPLUS(19940503,1,456,ires) fournira
     
    373373! Cette routine est utilisable avec des entiers 32 bits ou 64 bits.
    374374! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    375 !
     375
    376376! -------------------------------------------------
    377377! Date d'arrivee au jour pres.
     
    409409! si l'ecart entre les deux dates est inferieur a 2**31 secondes,
    410410! soit 68 ans!...
    411 !
     411
    412412! Au-dela de cette duree, les entiers doivent etre 64 bits.
    413413! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
    429429INTEGER(KIND=4) :: KEC
    430430character*(*) cd1,cd2
    431 !
     431
    432432! -------------------------------------------------
    433433! On lit les dates sur des entiers.
    434434! -------------------------------------------------
    435 !
     435
    436436read(cd1,fmt='(i8,3i2)') iamq1,ih1,im1,is1
    437 !
     437
    438438! -------------------------------------------------
    439439! Calculs d'ecarts et de leur partition
    440440! en multiples de 86400 et sous-multiples.
    441441! -------------------------------------------------
    442 !
     442
    443443isec=ih1*3600+im1*60+is1 ! nombre de secondes ecoulees depuis cd10h.
    444444idelta=kec+isec ! nombre de secondes entre cd10h et cd2.
    445445ireste=modulo(idelta,86400) ! nombre de secondes entre cd20h et cd2.
    446446iecjours=(idelta-ireste)/86400 ! nombre de jours entre cd10h et cd20h.
    447 !
     447
    448448! -------------------------------------------------
    449449! Date d'arrivee au jour pres.
    450450! -------------------------------------------------
    451 !
     451
    452452call daplus(iamq1,1,iecjours,iamq2)
    453 !
     453
    454454! -------------------------------------------------
    455455! Date finale a la seconde pres.
    456456! -------------------------------------------------
    457 !
     457
    458458ih2=ireste/3600
    459459ireste=ireste-3600*ih2
     
    470470! -------
    471471! 1999-08-17, J.M. Piriou.
    472 !
     472
    473473! Modifications:
    474474! --------------
    475 !
     475
    476476! --------------------------------------------------------------------------
    477477! En entree:
     
    485485! ps    seconde
    486486! --------------------------------------------------------------------------
    487 !
     487
    488488!-------------------------------------------------
    489489! Nombre de jours entre le 1er janvier 2000 � 0 UTC
     
    508508REAL(KIND=8) :: ZFRAC
    509509zecart=pdj-2451544.5
    510 !
     510
    511511!-------------------------------------------------
    512512! Nombre entier de jours.
    513513!-------------------------------------------------
    514 !
     514
    515515zfrac=modulo(zecart, 1._8 )
    516516iecart=nint(zecart-zfrac)
    517 !
     517
    518518!-------------------------------------------------
    519519! Date gr�gorienne associ�e.
    520520!-------------------------------------------------
    521 !
     521
    522522idate1=20000101
    523523call daplusj(idate1,iecart,idate2)
     
    526526kmm=mod(knouv,100)
    527527kaaaa=knouv/100
    528 !
     528
    529529!-------------------------------------------------
    530530! Calcul de des heure, minute et seconde.
    531531!-------------------------------------------------
    532 !
     532
    533533zfrac=(zecart-real(iecart))*24.
    534534khh=int(zfrac)
     
    544544! -------
    545545! 2002-11, J.M. Piriou.
    546 !
     546
    547547! Modifications:
    548548! --------------
    549 !
     549
    550550! --------------------------------------------------------------------------
    551551! En entree:
     
    561561REAL(KIND=8) :: ZS
    562562INTEGER(KIND=4) :: iaaaa,imm,iqq,ihh,imn
    563 !
     563
    564564!-------------------------------------------------
    565565! Conversion gr�gorien julien; cible 5 entiers et un r�el.
    566566!-------------------------------------------------
    567 !
     567
    568568call dj_vers_amqhms(pdj,iaaaa,imm,iqq,ihh,imn,zs)
    569 !
     569
    570570!-------------------------------------------------
    571571! On passe de ces 5 entiers et un r�el � un seul r�el.
    572572!-------------------------------------------------
    573 !
     573
    574574pgrer=real(iaaaa)*10000.+real(imm)*100. &
    575575& + real(iqq)+real(ihh)/100. &
     
    583583! -------
    584584! 2002-11, J.M. Piriou.
    585 !
     585
    586586! Modifications:
    587587! --------------
    588 !
     588
    589589! --------------------------------------------------------------------------
    590590! En entree:
     
    600600REAL(KIND=8) :: ZS,zloc
    601601INTEGER(KIND=4) :: iaaaa,imm,iqq,ihh,imn,iloc
    602 !
     602
    603603!-------------------------------------------------
    604604! On passe de cette date gr�gorienne donn�e
    605605! comme un seul r�el � 5 entiers et un r�el.
    606606!-------------------------------------------------
    607 !
     607
    608608iloc=int(pgrer)
    609609iqq=mod(iloc,100)
     
    617617imn=mod(iloc,100)
    618618ihh=iloc/100
    619 !
     619
    620620!-------------------------------------------------
    621621! Conversion gr�gorien julien; cible 5 entiers et un r�el.
    622622!-------------------------------------------------
    623 !
     623
    624624call amqhms_vers_dj(iaaaa,imm,iqq,ihh,imn,zs,pdj)
    625625end
     
    631631! -------
    632632! 97-01-09, J.M. Piriou.
    633 !
     633
    634634! Modifications:
    635635! --------------
    636 !
     636
    637637! --------------------------------------------------------------------------
    638638! En entree: kopt option de precision sur les dates:
     
    703703! si l'ecart entre les deux dates est inferieur a 2**31 jours,
    704704! soit 5879489 ans!...
    705 !
     705
    706706! Au-dela de cette duree, les entiers doivent etre 64 bits.
    707707! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    708 !
     708
    709709! -------------------------------------------------
    710710! Ecart entre les deux dates au jour pres.
     
    742742! si l'ecart entre les deux dates est inferieur a 2**31 secondes,
    743743! soit 68 ans!...
    744 !
     744
    745745! Au-dela de cette duree, les entiers doivent etre 64 bits.
    746746! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
    759759INTEGER(KIND=4) :: KECQ
    760760character*(*) cd1,cd2
    761 !
     761
    762762! -------------------------------------------------
    763763! On lit les dates sur des entiers.
    764764! -------------------------------------------------
    765 !
     765
    766766read(cd1,fmt='(i8,3i2)') iamq1,ih1,im1,is1
    767767read(cd2,fmt='(i8,3i2)') iamq2,ih2,im2,is2
    768 !
     768
    769769! -------------------------------------------------
    770770! Ecart entre les deux dates au jour pres.
    771771! -------------------------------------------------
    772 !
     772
    773773call ecartd(iamq1,iamq2,1,kecq)
    774 !
     774
    775775! -------------------------------------------------
    776776! Ecart en secondes.
    777777! -------------------------------------------------
    778 !
     778
    779779kec=kecq*86400+(ih2-ih1)*3600+(im2-im1)*60+is2-is1
    780780end
     
    786786! -------
    787787! 92-05-27, J.M. Piriou.
    788 !
     788
    789789! Modifications:
    790790! --------------
    791 !
     791
    792792! --------------------------------------------------------------------------
    793793! En entree: kopt option de precision sur les dates:
     
    837837INTEGER(KIND=4) :: KOPT
    838838data idebm/0,31,59,90,120,151,181,212,243,273,304,334/
    839 !
     839
    840840! --------------------------------------------------------------------------
    841841! **      1. Calcul du nb de jours separant ki2 du 1er janv 1900
    842 !
     842
    843843! *       1.1 Extraction des quantieme, mois et annee
    844844if(kopt == 1) then
     
    909909! --------------------------------------------------------------------------
    910910! **      2. Calcul du nb de jours separant ii1 du 1er janv 1900
    911 !
     911
    912912! *       2.1 Extraction des quantieme, mois et annee
    913913ii1=19000101
     
    952952! -------
    953953! 92-05-27, J.M. Piriou.
    954 !
     954
    955955! Modifications:
    956956! --------------
    957 !
     957
    958958! --------------------------------------------------------------------------
    959959! En entree: kopt option de precision sur les dates:
     
    10041004! --------------------------------------------------------------------------
    10051005! **   On determine la date approximative d'arrivee en annees decimales
    1006 !
     1006
    10071007if(kopt == 1) then
    10081008  ! Date de type AAAAMMQQ
     
    10261026! --------------------------------------------------------------------------
    10271027! **   On determine la date en clair ii2p associee a la date decimale
    1028 !
     1028
    10291029iaaaa=int(zarrdec)
    10301030zarrdec=12.*(zarrdec-real(iaaaa))
     
    10351035! --------------------------------------------------------------------------
    10361036! **   On calcule le nombre de jours separant 19000101 de ii2p
    1037 !
     1037
    10381038call gregod(ii2p,1,igii2p)
    10391039imod=mod(kgre,iconv)
     
    10421042! --------------------------------------------------------------------------
    10431043! **   On avance de iec jours par rapport a ii2p
    1044 !
     1044
    10451045! *       L'annee est-elle bissextile?
    10461046! Une annee est bissextile ssi elle est
     
    10711071! --------------------------------------------------------------------------
    10721072! **   On met en forme la date finale
    1073 !
     1073
    10741074idat=iqq+imm*100+iaaaa*10000
    10751075if(kopt == 2) then
     
    11011101! -------
    11021102! 94-10-31, J.M. Piriou.
    1103 !
     1103
    11041104! Modifications:
    11051105! --------------
    1106 !
     1106
    11071107! --------------------------------------------------------------------------
    11081108! En entree:
     
    11331133! -------
    11341134! 92-05-27, J.M. Piriou.
    1135 !
     1135
    11361136! Modifications:
    11371137! --------------
    1138 !
     1138
    11391139! --------------------------------------------------------------------------
    11401140
Note: See TracChangeset for help on using the changeset viewer.