Ignore:
Timestamp:
Apr 14, 2010, 10:55:22 AM (14 years ago)
Author:
musat
Message:

Add 3 output files for standard pressure levels AR5 exercice and flags
to manage their computation and output frequencies
histhfNMC.nc with 3 standard pressure levels
histdayNMC.nc with 8 (or may have 17) standard pressure levels
histmthNMC.nc with 17 standard pressure levels
Add 3 flags in the physiq.def file: freq_calNMC(3), freq_outNMC(3) and lev_histdayNMC
freq_calNMC(3) : computation frequency of variables on standard pressure levels

and by default has fallowing values (in fact physics' time step dtime)

freq_calNMC(1)=900.
freq_calNMC(2)=900.
freq_calNMC(3)=900.
freq_outNMC(3) : output frequency of variables on standard pressure levels

with following default values

freq_out(1) = 2592000. (30 days)
freq_out(2) = 86400. (1 day)
freq_out(3) = 21600. (6 hours)
lev_histdayNMC is 8 by default but may be switched to 17 (if we need more levels for a particular run)
IM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/phylmd/physiq.F

    r1347 r1350  
    3535      use regr_pr_av_m, only: regr_pr_av
    3636      use netcdf95, only: nf95_close
     37cIM for NMC files
     38      use netcdf, only: nf90_fill_real
    3739      use mod_phys_lmdz_mpi_data, only: is_mpi_root
    3840      USE aero_mod
     
    5658c   CLEFS CPP POUR LES IO
    5759c   =====================
    58 c#define histmthNMC
     60#define histNMC
    5961c#define histISCCP
    6062c======================================================================
     
    259261      CHARACTER*2 bb3
    260262c
    261       real tlevSTD(klon,nlevSTD), qlevSTD(klon,nlevSTD)
    262       real rhlevSTD(klon,nlevSTD), philevSTD(klon,nlevSTD)
    263       real ulevSTD(klon,nlevSTD), vlevSTD(klon,nlevSTD)
    264       real wlevSTD(klon,nlevSTD)
    265263
    266264      real twriteSTD(klon,nlevSTD,nfiles)
     
    271269      real vwriteSTD(klon,nlevSTD,nfiles)
    272270      real wwriteSTD(klon,nlevSTD,nfiles)
     271cIM for NMC files
     272      REAL geo500(klon)
     273      real :: rlevSTD3(nlevSTD3)
     274      DATA rlevSTD3/85000., 50000., 25000./
     275      SAVE rlevSTD3
     276c$OMP THREADPRIVATE(rlevSTD3)
     277      real :: rlevSTD8(nlevSTD8)
     278      DATA rlevSTD8/100000., 85000., 70000., 50000., 25000., 10000.,
     279     $     5000., 1000./
     280      SAVE rlevSTD8
     281c$OMP THREADPRIVATE(rlevSTD8)
     282      real twriteSTD3(klon,nlevSTD3)
     283      real qwriteSTD3(klon,nlevSTD3)
     284      real rhwriteSTD3(klon,nlevSTD3)
     285      real phiwriteSTD3(klon,nlevSTD3)
     286      real uwriteSTD3(klon,nlevSTD3)
     287      real vwriteSTD3(klon,nlevSTD3)
     288      real wwriteSTD3(klon,nlevSTD3)
     289c
     290      real tnondefSTD8(klon,nlevSTD8)
     291      real twriteSTD8(klon,nlevSTD8)
     292      real qwriteSTD8(klon,nlevSTD8)
     293      real rhwriteSTD8(klon,nlevSTD8)
     294      real phiwriteSTD8(klon,nlevSTD8)
     295      real uwriteSTD8(klon,nlevSTD8)
     296      real vwriteSTD8(klon,nlevSTD8)
     297      real wwriteSTD8(klon,nlevSTD8)
     298c
     299c plevSTD3 END
    273300c
    274301c nout : niveau de output des variables a une pression donnee
     
    278305c a partir des valeurs instantannees toutes les 6 h
    279306c qui sont moyennees sur le mois
    280 c
    281       real uvSTD(klon,nlevSTD)
    282       real vqSTD(klon,nlevSTD)
    283       real vTSTD(klon,nlevSTD)
    284       real wqSTD(klon,nlevSTD)
    285 c
    286       real vphiSTD(klon,nlevSTD)
    287       real wTSTD(klon,nlevSTD)
    288       real u2STD(klon,nlevSTD)
    289       real v2STD(klon,nlevSTD)
    290       real T2STD(klon,nlevSTD)
    291307c
    292308#include "radopt.h"
     
    976992      REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
    977993      REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D
    978 c#ifdef histmthNMC
     994c#ifdef histNMC
    979995cym   A voir plus tard !!!!
    980996cym      REAL zx_tmp_NC(iim,jjmp1,nlevSTD)
     
    9841000      REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev)
    9851001      REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
    986 c
    987       INTEGER nid_day, nid_mth, nid_ins, nid_nmc, nid_day_seri
    988       INTEGER nid_ctesGCM
    989       SAVE nid_day, nid_mth, nid_ins, nid_nmc, nid_day_seri
    990       SAVE nid_ctesGCM
    991 c$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins, nid_nmc)
     1002cIM for NMC files
     1003      REAL missing_val
     1004      REAL, SAVE :: freq_moyNMC(nout)
     1005c$OMP THREADPRIVATE(freq_moyNMC)
     1006c
     1007      INTEGER nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
     1008      INTEGER nid_hfnmc, nid_day_seri, nid_ctesGCM
     1009      SAVE nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
     1010      SAVE nid_hfnmc, nid_day_seri, nid_ctesGCM
     1011c$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins)
     1012c$OMP THREADPRIVATE(nid_mthnmc, nid_daynmc, nid_hfnmc)
    9921013c$OMP THREADPRIVATE(nid_day_seri,nid_ctesGCM)
    9931014c
     
    11121133!     edges of pressure intervals for ozone climatologies, in Pa, in strictly
    11131134!     ascending order
     1135cIM for NMC files en parallele
     1136c$OMP THREADPRIVATE(read_climoz, ncid_climoz, press_climoz)
    11141137
    11151138      integer, save:: co3i = 0
     
    11351158c============================================================
    11361159      real :: mr_ozone(klon,klev)
     1160cIM for NMC files
     1161      missing_val=nf90_fill_real
    11371162c======================================================================
    11381163! Ecriture eventuelle d'un profil verticale en entree de la physique.
     
    11801205      print*, 'Allocation des variables locales et sauvegardees'
    11811206      call phys_local_var_init
     1207c
     1208      pasphys=pdtphys
    11821209c     appel a la lecture du run.def physique
    11831210      call conf_phys(ok_journe, ok_mensuel,
     
    11971224      call phys_state_var_init(read_climoz)
    11981225      print*, '================================================='
    1199 
     1226cIM for NMC files
     1227cIM freq_moyNMC = frequences auxquelles on moyenne les champs accumules
     1228cIM               sur les niveaux de pression standard du NMC
     1229      DO n=1, nout
     1230       freq_moyNMC(n)=freq_outNMC(n)/freq_calNMC(n)
     1231      ENDDO
     1232c
    12001233cIM beg
    12011234          dnwd0=0.0
     
    14731506#endif
    14741507
    1475 #ifdef histmthNMC
     1508#ifdef histNMC
     1509#include "ini_histhfNMC.h"
     1510#include "ini_histdayNMC.h"
    14761511#include "ini_histmthNMC.h"
    14771512#endif
     
    14871522
    14881523         ecrit_hf = ecrit_hf * un_jour
    1489 !IM
     1524cIM
    14901525         IF(ecrit_day.LE.1.) THEN
    14911526          ecrit_day = ecrit_day * un_jour !en secondes
    14921527         ENDIF
    1493 !IM
     1528cIM
    14941529         ecrit_mth = ecrit_mth * un_jour
    14951530         ecrit_ins = ecrit_ins * un_jour
     
    27552790     &        tausum_aero, tau3d_aero)
    27562791      ELSE
     2792cIM 170310 BEG
     2793         tausum_aero(:,:,:) = 0.
     2794cIM 170310 END
    27572795         tau_aero(:,:,:,:) = 0.
    27582796         piz_aero(:,:,:,:) = 0.
     
    33903428c
    33913429#include "calcul_STDlev.h"
    3392       twriteSTD(:,:,1)=tsumSTD(:,:,2)
    3393       qwriteSTD(:,:,1)=qsumSTD(:,:,2)
    3394       rhwriteSTD(:,:,1)=rhsumSTD(:,:,2)
    3395       phiwriteSTD(:,:,1)=phisumSTD(:,:,2)
    3396       uwriteSTD(:,:,1)=usumSTD(:,:,2)
    3397       vwriteSTD(:,:,1)=vsumSTD(:,:,2)
    3398       wwriteSTD(:,:,1)=wsumSTD(:,:,2)
    3399 
    3400       twriteSTD(:,:,2)=tsumSTD(:,:,1)
    3401       qwriteSTD(:,:,2)=qsumSTD(:,:,1)
    3402       rhwriteSTD(:,:,2)=rhsumSTD(:,:,1)
    3403       phiwriteSTD(:,:,2)=phisumSTD(:,:,1)
    3404       uwriteSTD(:,:,2)=usumSTD(:,:,1)
    3405       vwriteSTD(:,:,2)=vsumSTD(:,:,1)
    3406       wwriteSTD(:,:,2)=wsumSTD(:,:,1)
     3430      twriteSTD(:,:,1)=tsumSTD(:,:,1)
     3431      qwriteSTD(:,:,1)=qsumSTD(:,:,1)
     3432      rhwriteSTD(:,:,1)=rhsumSTD(:,:,1)
     3433      phiwriteSTD(:,:,1)=phisumSTD(:,:,1)
     3434      uwriteSTD(:,:,1)=usumSTD(:,:,1)
     3435      vwriteSTD(:,:,1)=vsumSTD(:,:,1)
     3436      wwriteSTD(:,:,1)=wsumSTD(:,:,1)
     3437
     3438      twriteSTD(:,:,2)=tsumSTD(:,:,2)
     3439      qwriteSTD(:,:,2)=qsumSTD(:,:,2)
     3440      rhwriteSTD(:,:,2)=rhsumSTD(:,:,2)
     3441      phiwriteSTD(:,:,2)=phisumSTD(:,:,2)
     3442      uwriteSTD(:,:,2)=usumSTD(:,:,2)
     3443      vwriteSTD(:,:,2)=vsumSTD(:,:,2)
     3444      wwriteSTD(:,:,2)=wsumSTD(:,:,2)
    34073445
    34083446      twriteSTD(:,:,3)=tlevSTD(:,:)
     
    34213459      vwriteSTD(:,:,4)=vlevSTD(:,:)
    34223460      wwriteSTD(:,:,4)=wlevSTD(:,:)
     3461c
     3462cIM ajoute 5eme niveau 170310 BEG
     3463      twriteSTD(:,:,5)=tlevSTD(:,:)
     3464      qwriteSTD(:,:,5)=qlevSTD(:,:)
     3465      rhwriteSTD(:,:,5)=rhlevSTD(:,:)
     3466      phiwriteSTD(:,:,5)=philevSTD(:,:)
     3467      uwriteSTD(:,:,5)=ulevSTD(:,:)
     3468      vwriteSTD(:,:,5)=vlevSTD(:,:)
     3469      wwriteSTD(:,:,5)=wlevSTD(:,:)
     3470cIM for NMC files
     3471      DO n=1, nlevSTD3
     3472       DO k=1, nlevSTD
     3473        if(rlevSTD3(n).EQ.rlevSTD(k)) THEN
     3474         twriteSTD3(:,n)=tlevSTD(:,k)
     3475         qwriteSTD3(:,n)=qlevSTD(:,k)
     3476         rhwriteSTD3(:,n)=rhlevSTD(:,k)
     3477         phiwriteSTD3(:,n)=philevSTD(:,k)
     3478         uwriteSTD3(:,n)=ulevSTD(:,k)
     3479         vwriteSTD3(:,n)=vlevSTD(:,k)
     3480         wwriteSTD3(:,n)=wlevSTD(:,k)
     3481        endif !rlevSTD3(n).EQ.rlevSTD(k)
     3482       ENDDO
     3483      ENDDO
     3484c
     3485      DO n=1, nlevSTD8
     3486       DO k=1, nlevSTD
     3487        if(rlevSTD8(n).EQ.rlevSTD(k)) THEN
     3488         tnondefSTD8(:,n)=tnondef(:,k,2)
     3489         twriteSTD8(:,n)=tsumSTD(:,k,2)
     3490         qwriteSTD8(:,n)=qsumSTD(:,k,2)
     3491         rhwriteSTD8(:,n)=rhsumSTD(:,k,2)
     3492         phiwriteSTD8(:,n)=phisumSTD(:,k,2)
     3493         uwriteSTD8(:,n)=usumSTD(:,k,2)
     3494         vwriteSTD8(:,n)=vsumSTD(:,k,2)
     3495         wwriteSTD8(:,n)=wsumSTD(:,k,2)
     3496        endif !rlevSTD8(n).EQ.rlevSTD(k)
     3497       ENDDO
     3498      ENDDO
    34233499c
    34243500c slp sea level pressure
     
    35793655#endif
    35803656
    3581 #ifdef histmthNMC
     3657#ifdef histNMC
     3658#include "write_histhfNMC.h"
     3659#include "write_histdayNMC.h"
    35823660#include "write_histmthNMC.h"
    35833661#endif
Note: See TracChangeset for help on using the changeset viewer.