Ignore:
Timestamp:
Apr 14, 2010, 11:41:19 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/trunk/libf/phylmd/physiq.F

    r1340 r1352  
    3434      use regr_pr_av_m, only: regr_pr_av
    3535      use netcdf95, only: nf95_close
     36cIM for NMC files
     37      use netcdf, only: nf90_fill_real
    3638      use mod_phys_lmdz_mpi_data, only: is_mpi_root
    3739      USE aero_mod
     
    5355c   CLEFS CPP POUR LES IO
    5456c   =====================
    55 c#define histmthNMC
     57#define histNMC
    5658c#define histISCCP
    5759c======================================================================
     
    256258      CHARACTER*4 bb2
    257259      CHARACTER*2 bb3
    258 c
    259       real tlevSTD(klon,nlevSTD), qlevSTD(klon,nlevSTD)
    260       real rhlevSTD(klon,nlevSTD), philevSTD(klon,nlevSTD)
    261       real ulevSTD(klon,nlevSTD), vlevSTD(klon,nlevSTD)
    262       real wlevSTD(klon,nlevSTD)
    263 
     260c
    264261      real twriteSTD(klon,nlevSTD,nfiles)
    265262      real qwriteSTD(klon,nlevSTD,nfiles)
     
    269266      real vwriteSTD(klon,nlevSTD,nfiles)
    270267      real wwriteSTD(klon,nlevSTD,nfiles)
     268cIM for NMC files
     269      REAL geo500(klon)
     270      real :: rlevSTD3(nlevSTD3)
     271      DATA rlevSTD3/85000., 50000., 25000./
     272      SAVE rlevSTD3
     273c$OMP THREADPRIVATE(rlevSTD3)
     274      real :: rlevSTD8(nlevSTD8)
     275      DATA rlevSTD8/100000., 85000., 70000., 50000., 25000., 10000.,
     276     $     5000., 1000./
     277      SAVE rlevSTD8
     278c$OMP THREADPRIVATE(rlevSTD8)
     279      real twriteSTD3(klon,nlevSTD3)
     280      real qwriteSTD3(klon,nlevSTD3)
     281      real rhwriteSTD3(klon,nlevSTD3)
     282      real phiwriteSTD3(klon,nlevSTD3)
     283      real uwriteSTD3(klon,nlevSTD3)
     284      real vwriteSTD3(klon,nlevSTD3)
     285      real wwriteSTD3(klon,nlevSTD3)
     286c
     287      real tnondefSTD8(klon,nlevSTD8)
     288      real twriteSTD8(klon,nlevSTD8)
     289      real qwriteSTD8(klon,nlevSTD8)
     290      real rhwriteSTD8(klon,nlevSTD8)
     291      real phiwriteSTD8(klon,nlevSTD8)
     292      real uwriteSTD8(klon,nlevSTD8)
     293      real vwriteSTD8(klon,nlevSTD8)
     294      real wwriteSTD8(klon,nlevSTD8)
     295c
     296c plevSTD3 END
    271297c
    272298c nout : niveau de output des variables a une pression donnee
     
    276302c a partir des valeurs instantannees toutes les 6 h
    277303c qui sont moyennees sur le mois
    278 c
    279       real uvSTD(klon,nlevSTD)
    280       real vqSTD(klon,nlevSTD)
    281       real vTSTD(klon,nlevSTD)
    282       real wqSTD(klon,nlevSTD)
    283 c
    284       real vphiSTD(klon,nlevSTD)
    285       real wTSTD(klon,nlevSTD)
    286       real u2STD(klon,nlevSTD)
    287       real v2STD(klon,nlevSTD)
    288       real T2STD(klon,nlevSTD)
    289304c
    290305#include "radopt.h"
     
    971986      REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
    972987      REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D
    973 c#ifdef histmthNMC
     988c#ifdef histNMC
    974989cym   A voir plus tard !!!!
    975990cym      REAL zx_tmp_NC(iim,jjmp1,nlevSTD)
     
    979994      REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev)
    980995      REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
    981 c
    982       INTEGER nid_day, nid_mth, nid_ins, nid_nmc, nid_day_seri
    983       INTEGER nid_ctesGCM
    984       SAVE nid_day, nid_mth, nid_ins, nid_nmc, nid_day_seri
    985       SAVE nid_ctesGCM
    986 c$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins, nid_nmc)
     996cIM for NMC files
     997      REAL missing_val
     998      REAL, SAVE :: freq_moyNMC(nout)
     999c$OMP THREADPRIVATE(freq_moyNMC)
     1000c
     1001      INTEGER nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
     1002      INTEGER nid_hfnmc, nid_day_seri, nid_ctesGCM
     1003      SAVE nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
     1004      SAVE nid_hfnmc, nid_day_seri, nid_ctesGCM
     1005c$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins)
     1006c$OMP THREADPRIVATE(nid_mthnmc, nid_daynmc, nid_hfnmc)
    9871007c$OMP THREADPRIVATE(nid_day_seri,nid_ctesGCM)
    9881008c
     
    11071127!     edges of pressure intervals for ozone climatologies, in Pa, in strictly
    11081128!     ascending order
     1129cIM for NMC files en parallele
     1130c$OMP THREADPRIVATE(read_climoz, ncid_climoz, press_climoz)
    11091131
    11101132      integer, save:: co3i = 0
     
    11301152c============================================================
    11311153      real :: mr_ozone(klon,klev)
     1154cIM for NMC files
     1155      missing_val=nf90_fill_real
    11321156c======================================================================
    11331157! Ecriture eventuelle d'un profil verticale en entree de la physique.
     
    11751199      print*, 'Allocation des variables locales et sauvegardees'
    11761200      call phys_local_var_init
     1201c
     1202      pasphys=pdtphys
    11771203c     appel a la lecture du run.def physique
    11781204      call conf_phys(ok_journe, ok_mensuel,
     
    11921218      call phys_output_var_init
    11931219      print*, '================================================='
    1194 
     1220cIM for NMC files
     1221cIM freq_moyNMC = frequences auxquelles on moyenne les champs accumules
     1222cIM               sur les niveaux de pression standard du NMC
     1223      DO n=1, nout
     1224       freq_moyNMC(n)=freq_outNMC(n)/freq_calNMC(n)
     1225      ENDDO
     1226c
    11951227cIM beg
    11961228          dnwd0=0.0
     
    14691501#endif
    14701502
    1471 #ifdef histmthNMC
     1503#ifdef histNMC
     1504#include "ini_histhfNMC.h"
     1505#include "ini_histdayNMC.h"
    14721506#include "ini_histmthNMC.h"
    14731507#endif
     
    14831517
    14841518         ecrit_hf = ecrit_hf * un_jour
    1485 !IM
     1519cIM
    14861520         IF(ecrit_day.LE.1.) THEN
    14871521          ecrit_day = ecrit_day * un_jour !en secondes
    14881522         ENDIF
    1489 !IM
     1523cIM
    14901524         ecrit_mth = ecrit_mth * un_jour
    14911525         ecrit_ins = ecrit_ins * un_jour
     
    33313365c
    33323366#include "calcul_STDlev.h"
    3333       twriteSTD(:,:,1)=tsumSTD(:,:,2)
    3334       qwriteSTD(:,:,1)=qsumSTD(:,:,2)
    3335       rhwriteSTD(:,:,1)=rhsumSTD(:,:,2)
    3336       phiwriteSTD(:,:,1)=phisumSTD(:,:,2)
    3337       uwriteSTD(:,:,1)=usumSTD(:,:,2)
    3338       vwriteSTD(:,:,1)=vsumSTD(:,:,2)
    3339       wwriteSTD(:,:,1)=wsumSTD(:,:,2)
    3340 
    3341       twriteSTD(:,:,2)=tsumSTD(:,:,1)
    3342       qwriteSTD(:,:,2)=qsumSTD(:,:,1)
    3343       rhwriteSTD(:,:,2)=rhsumSTD(:,:,1)
    3344       phiwriteSTD(:,:,2)=phisumSTD(:,:,1)
    3345       uwriteSTD(:,:,2)=usumSTD(:,:,1)
    3346       vwriteSTD(:,:,2)=vsumSTD(:,:,1)
    3347       wwriteSTD(:,:,2)=wsumSTD(:,:,1)
     3367      twriteSTD(:,:,1)=tsumSTD(:,:,1)
     3368      qwriteSTD(:,:,1)=qsumSTD(:,:,1)
     3369      rhwriteSTD(:,:,1)=rhsumSTD(:,:,1)
     3370      phiwriteSTD(:,:,1)=phisumSTD(:,:,1)
     3371      uwriteSTD(:,:,1)=usumSTD(:,:,1)
     3372      vwriteSTD(:,:,1)=vsumSTD(:,:,1)
     3373      wwriteSTD(:,:,1)=wsumSTD(:,:,1)
     3374
     3375      twriteSTD(:,:,2)=tsumSTD(:,:,2)
     3376      qwriteSTD(:,:,2)=qsumSTD(:,:,2)
     3377      rhwriteSTD(:,:,2)=rhsumSTD(:,:,2)
     3378      phiwriteSTD(:,:,2)=phisumSTD(:,:,2)
     3379      uwriteSTD(:,:,2)=usumSTD(:,:,2)
     3380      vwriteSTD(:,:,2)=vsumSTD(:,:,2)
     3381      wwriteSTD(:,:,2)=wsumSTD(:,:,2)
    33483382
    33493383      twriteSTD(:,:,3)=tlevSTD(:,:)
     
    33623396      vwriteSTD(:,:,4)=vlevSTD(:,:)
    33633397      wwriteSTD(:,:,4)=wlevSTD(:,:)
     3398c
     3399cIM initialisation 5eme fichier de sortie
     3400      twriteSTD(:,:,5)=tlevSTD(:,:)
     3401      qwriteSTD(:,:,5)=qlevSTD(:,:)
     3402      rhwriteSTD(:,:,5)=rhlevSTD(:,:)
     3403      phiwriteSTD(:,:,5)=philevSTD(:,:)
     3404      uwriteSTD(:,:,5)=ulevSTD(:,:)
     3405      vwriteSTD(:,:,5)=vlevSTD(:,:)
     3406      wwriteSTD(:,:,5)=wlevSTD(:,:)
     3407cIM for NMC files
     3408      DO n=1, nlevSTD3
     3409       DO k=1, nlevSTD
     3410        if(rlevSTD3(n).EQ.rlevSTD(k)) THEN
     3411         twriteSTD3(:,n)=tlevSTD(:,k)
     3412         qwriteSTD3(:,n)=qlevSTD(:,k)
     3413         rhwriteSTD3(:,n)=rhlevSTD(:,k)
     3414         phiwriteSTD3(:,n)=philevSTD(:,k)
     3415         uwriteSTD3(:,n)=ulevSTD(:,k)
     3416         vwriteSTD3(:,n)=vlevSTD(:,k)
     3417         wwriteSTD3(:,n)=wlevSTD(:,k)
     3418        endif !rlevSTD3(n).EQ.rlevSTD(k)
     3419       ENDDO
     3420      ENDDO
     3421c
     3422      DO n=1, nlevSTD8
     3423       DO k=1, nlevSTD
     3424        if(rlevSTD8(n).EQ.rlevSTD(k)) THEN
     3425         tnondefSTD8(:,n)=tnondef(:,k,2)
     3426         twriteSTD8(:,n)=tsumSTD(:,k,2)
     3427         qwriteSTD8(:,n)=qsumSTD(:,k,2)
     3428         rhwriteSTD8(:,n)=rhsumSTD(:,k,2)
     3429         phiwriteSTD8(:,n)=phisumSTD(:,k,2)
     3430         uwriteSTD8(:,n)=usumSTD(:,k,2)
     3431         vwriteSTD8(:,n)=vsumSTD(:,k,2)
     3432         wwriteSTD8(:,n)=wsumSTD(:,k,2)
     3433        endif !rlevSTD8(n).EQ.rlevSTD(k)
     3434       ENDDO
     3435      ENDDO
    33643436c
    33653437c slp sea level pressure
     
    35213593#endif
    35223594
    3523 #ifdef histmthNMC
     3595#ifdef histNMC
     3596#include "write_histhfNMC.h"
     3597#include "write_histdayNMC.h"
    35243598#include "write_histmthNMC.h"
    35253599#endif
Note: See TracChangeset for help on using the changeset viewer.