Ignore:
Timestamp:
Jul 28, 2025, 7:23:15 PM (6 days ago)
Author:
aborella
Message:

Merge with trunk r5789

Location:
LMDZ6/branches/contrails
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/contrails

  • LMDZ6/branches/contrails/libf/phylmd/calcul_STDlev.h

    r2312 r5791  
    22! $Header$
    33!
     4!-------------------------------------------------------------------
     5! Interpolation sur des niveaux de pression.
     6!
     7! Enchainement des operations en prenant pour exemple la temperature
     8!
     9! 1. CALL ini_undefSTD :
     10!  On met les champs cumules à 0 si
     11!  if mod(itap,nint(freq_outnmc(n)/phys_tstep))==1
     12!          tnondef(i, k, n) = 0.
     13!          tsumstd(i, k, n) = 0.
     14!
     15! 2. Ensuite :
     16!   on interpole les champs sur les niveaux STD de pression
     17!   a chaque pas de temps de la physique avec plevel_new
     18!   t_seri -> tlevSTD
     19!
     20! 3. CALL undefSTD :
     21!   On ajoute les champs à la moyenne tous les frec_calnmc
     22!      pas de temps
     23!   IF (mod(itap,nint(freq_calnmc(n)/phys_tstep))==0) THEN
     24!         IF (tlevstd(i,k)==missing_val) THEN
     25!           tnondef(i, k, n) = tnondef(i, k, n) + 1.
     26!         ELSE IF (tlevstd(i,k)/=missing_val) THEN
     27!           tsumstd(i, k, n) = tsumstd(i, k, n) + tlevstd(i, k)
     28!
     29! 4. CALL moy_undefSTD
     30!    On normalise à freq_outnmc, avant de reinitialiser plus haut dans ini_undef
     31!    IF mod(itap,nint(freq_outnmc(n)/phys_tstep))==0
     32!         tsumstd(i, k, n) = tsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k,n))
     33!
     34! 5. Intrpolation des flux (pourquoi pas avec 2 ?)
     35!
     36! 6. Choix entre instantanné et moyenne en temps
     37!     twriteSTD(:,:,1)=tsumSTD(:,:,1)
     38!     twriteSTD(:,:,3)=tlevSTD(:,:)
     39!
     40!  Premiere série de modifications (2025/05/07, FH) :
     41!   - Fait en sorte que freq_outnmc=ecrit_files
     42!   - Mis tous les USE avec ONLY dans *undefSTD.f90
     43!   - Utilie ecrit_files comme frequence de sortie freq_outnmc
     44!   - Nettoye la lecture des freq_outnmc et freq_calnmc dans conf_phys
     45!   - Passe les dimensionnement de certaines variables de 3 à 10
     46!     nombre de fichiers par défaut. En gros nout=nfiles
     47
     48!  Proposition de modifications :
     49!   - Ne plus calculer l'interpolation à tous les pas de temps
     50!      mais seulement à la fréquence freq_calcnmc
     51!   - Mettre le call ini_undefSTD juste avant undef_STD et moy_undefSTD
     52!   - Enlever ecrit_files(7) = freq_outNMC(1) dans phys_output_mod
     53!   - Enlever les vieux controles de fichiers dans conf_phys
     54!   - enlever les dimensionnement à 10 en dur
     55!   - Enlever toute chaine de caractère NMC dans le modèle.
     56!
     57!-------------------------------------------------------------------
     58
    459!IM on initialise les variables
    560!
    661!       missing_val=nf90_fill_real
    762!
     63
     64! On peut à terme utiliser directement ecrit_files (le nom est moins
     65! bien choisi ...
     66
     67       !print*,'STDSTD ecrit_files ',ecrit_files(1:4)
     68       freq_outnmc(:)=ecrit_files(:)
     69       freq_calnmc(:)=pdtphys
     70
    871       IF (.not. ok_all_xml) then
    9         CALL ini_undefSTD(itap,itapm1)
     72        CALL ini_undefSTD(itap)
    1073       ENDIF
    11 !
    12 !IM on interpole les champs sur les niveaux STD de pression
    13 !IM a chaque pas de temps de la physique
    1474!
    1575!-------------------------------------------------------c
     
    134194       IF (.not. ok_all_xml) then
    135195        CALL undefSTD(itap, read_climoz)
    136         CALL moy_undefSTD(itap,itapm1)
     196        CALL moy_undefSTD(itap)
    137197       ENDIF
    138198!
     
    160220           lwup,LWup200)
    161221!
    162       twriteSTD(:,:,1)=tsumSTD(:,:,1)
    163       qwriteSTD(:,:,1)=qsumSTD(:,:,1)
    164       rhwriteSTD(:,:,1)=rhsumSTD(:,:,1)
    165       phiwriteSTD(:,:,1)=phisumSTD(:,:,1)
    166       uwriteSTD(:,:,1)=usumSTD(:,:,1)
    167       vwriteSTD(:,:,1)=vsumSTD(:,:,1)
    168       wwriteSTD(:,:,1)=wsumSTD(:,:,1)
    169 
    170       twriteSTD(:,:,2)=tsumSTD(:,:,2)
    171       qwriteSTD(:,:,2)=qsumSTD(:,:,2)
    172       rhwriteSTD(:,:,2)=rhsumSTD(:,:,2)
    173       phiwriteSTD(:,:,2)=phisumSTD(:,:,2)
    174       uwriteSTD(:,:,2)=usumSTD(:,:,2)
    175       vwriteSTD(:,:,2)=vsumSTD(:,:,2)
    176       wwriteSTD(:,:,2)=wsumSTD(:,:,2)
    177 
    178       twriteSTD(:,:,3)=tlevSTD(:,:)
    179       qwriteSTD(:,:,3)=qlevSTD(:,:)
    180       rhwriteSTD(:,:,3)=rhlevSTD(:,:)
    181       phiwriteSTD(:,:,3)=philevSTD(:,:)
    182       uwriteSTD(:,:,3)=ulevSTD(:,:)
    183       vwriteSTD(:,:,3)=vlevSTD(:,:)
    184       wwriteSTD(:,:,3)=wlevSTD(:,:)
    185 
    186       twriteSTD(:,:,4)=tlevSTD(:,:)
    187       qwriteSTD(:,:,4)=qlevSTD(:,:)
    188       rhwriteSTD(:,:,4)=rhlevSTD(:,:)
    189       phiwriteSTD(:,:,4)=philevSTD(:,:)
    190       uwriteSTD(:,:,4)=ulevSTD(:,:)
    191       vwriteSTD(:,:,4)=vlevSTD(:,:)
    192       wwriteSTD(:,:,4)=wlevSTD(:,:)
    193 !
    194 !IM initialisation 5eme fichier de sortie
    195       twriteSTD(:,:,5)=tlevSTD(:,:)
    196       qwriteSTD(:,:,5)=qlevSTD(:,:)
    197       rhwriteSTD(:,:,5)=rhlevSTD(:,:)
    198       phiwriteSTD(:,:,5)=philevSTD(:,:)
    199       uwriteSTD(:,:,5)=ulevSTD(:,:)
    200       vwriteSTD(:,:,5)=vlevSTD(:,:)
    201       wwriteSTD(:,:,5)=wlevSTD(:,:)
    202 !
    203 !IM initialisation 6eme fichier de sortie
    204       twriteSTD(:,:,6)=tlevSTD(:,:)
    205       qwriteSTD(:,:,6)=qlevSTD(:,:)
    206       rhwriteSTD(:,:,6)=rhlevSTD(:,:)
    207       phiwriteSTD(:,:,6)=philevSTD(:,:)
    208       uwriteSTD(:,:,6)=ulevSTD(:,:)
    209       vwriteSTD(:,:,6)=vlevSTD(:,:)
    210       wwriteSTD(:,:,6)=wlevSTD(:,:)
     222      do n=1,nout
     223         !print*,'STDSTD n nout',n,nout,clef_files(n)
     224         if (clef_files(n)) then
     225             if (type_ecri(n)=='ave(X)') then
     226                 !print*,'STDSTD fichier ave(X), n=',n
     227                 twriteSTD(:,:,n)=tsumSTD(:,:,n)
     228                 qwriteSTD(:,:,n)=qsumSTD(:,:,n)
     229                 rhwriteSTD(:,:,n)=rhsumSTD(:,:,n)
     230                 phiwriteSTD(:,:,n)=phisumSTD(:,:,n)
     231                 uwriteSTD(:,:,n)=usumSTD(:,:,n)
     232                 vwriteSTD(:,:,n)=vsumSTD(:,:,n)
     233                 wwriteSTD(:,:,n)=wsumSTD(:,:,n)
     234             else
     235                 !print*,'STDSTD fichier autre, n=',n,type_ecri(n)
     236                 twriteSTD(:,:,n)=tlevSTD(:,:)
     237                 qwriteSTD(:,:,n)=qlevSTD(:,:)
     238                 rhwriteSTD(:,:,n)=rhlevSTD(:,:)
     239                 phiwriteSTD(:,:,n)=philevSTD(:,:)
     240                 uwriteSTD(:,:,n)=ulevSTD(:,:)
     241                 vwriteSTD(:,:,n)=vlevSTD(:,:)
     242                 wwriteSTD(:,:,n)=wlevSTD(:,:)
     243             endif
     244         endif
     245      enddo
     246
    211247!IM for NMC files
    212248      DO n=1, nlevSTD3
Note: See TracChangeset for help on using the changeset viewer.