Ignore:
Timestamp:
May 6, 2015, 12:14:12 PM (10 years ago)
Author:
ymipsl
Message:

Reorganize geometry and grid modules. Prepare physics for unstructutured grid support. Simplify initialization of physics from dynamic.
Compiled only with dynd3dmem, but not tested for moment.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dynamico_lmdz/aquaplanet/LMDZ5/libf/phylmd/physiq.F90

    r3819 r3825  
    77     u,v,t,qx, &
    88     flxmass_w, &
    9      d_u, d_v, d_t, d_qx, d_ps &
    10      , dudyn)
     9     d_u, d_v, d_t, d_qx, d_ps)
    1110
    1211  USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, &
    1312       histwrite, ju2ymds, ymds2ju, getin
    14   USE comgeomphy, ONLY: airephy
     13  USE geometry_mod, ONLY: cell_area
    1514  USE phys_cal_mod, only: year_len, mth_len, days_elapsed, jh_1jan, year_cur, &
    1615       mth_cur, phys_cal_update
     
    3332  USE phys_output_ctrlout_mod
    3433  USE iophy
     34  USE geometry_mod, ONLY : lon_degrees, lat_degrees
    3535  use open_climoz_m, only: open_climoz ! ozone climatology from a file
    3636  use regr_pr_av_m, only: regr_pr_av
     
    681681!  PARAMETER(imp1jmp1=(iim+1)*jjmp1) ! => (imp1jmp1=(nbp_lon+1)*(nbp_lat-1/(nbp_lat-1)))
    682682  !ym A voir plus tard
    683   REAL zx_tmp((nbp_lon+1)*(nbp_lat-1/(nbp_lat-1)))
    684   REAL airedyn(nbp_lon+1,nbp_lat-1/(nbp_lat-1))
    685   REAL padyn(nbp_lon+1,nbp_lat-1/(nbp_lat-1),klev+1)
    686   REAL dudyn(nbp_lon+1,nbp_lat-1/(nbp_lat-1),klev)
    687   REAL rlatdyn(nbp_lon+1,nbp_lat-1/(nbp_lat-1))
     683!  REAL zx_tmp((nbp_lon+1)*(nbp_lat-1/(nbp_lat-1)))
    688684  !IM 190504 END
    689685  LOGICAL ok_msk
     
    12641260     ok_sync_omp=.false.
    12651261     CALL getin('ok_sync',ok_sync_omp)
    1266      call phys_output_open(rlon,rlat,nCFMIP,tabijGCM, &
     1262     call phys_output_open(lon_degrees,lat_degrees,nCFMIP,tabijGCM, &
    12671263          iGCM,jGCM,lonGCM,latGCM, &
    12681264          jjmp1,nlevSTD,clevSTD,rlevSTD, dtime,ok_veget, &
     
    13181314             rg, &
    13191315             ra, &
    1320              airephy, &
    1321              rlat, &
    1322              rlon, &
     1316             cell_area, &
     1317             lat_degrees, &
     1318             lon_degrees, &
    13231319             presnivs, &
    13241320             calday, &
     
    15261522  IF (ip_ebil_phy.ge.1) THEN
    15271523     ztit='after dynamic'
    1528      CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
     1524     CALL diagetpq(cell_area,ztit,ip_ebil_phy,1,1,dtime &
    15291525          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    15301526          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    15331529     !     est egale a la variation de la physique au pas de temps precedent.
    15341530     !     Donc la somme de ces 2 variations devrait etre nulle.
    1535      call diagphy(airephy,ztit,ip_ebil_phy &
     1531     call diagphy(cell_area,ztit,ip_ebil_phy &
    15361532          , zero_v, zero_v, zero_v, zero_v, zero_v &
    15371533          , zero_v, zero_v, zero_v, ztsol &
     
    16751671        zzz=real(90) ! could be revisited
    16761672     ENDIF
    1677      wo(:,:,1)=ozonecm(rlat, paprs,read_climoz,rjour=zzz)
     1673     wo(:,:,1)=ozonecm(lat_degrees, paprs,read_climoz,rjour=zzz)
    16781674  ENDIF
    16791675  !
     
    17301726  IF (ip_ebil_phy.ge.2) THEN
    17311727     ztit='after reevap'
    1732      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,1,dtime &
     1728     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,1,dtime &
    17331729          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    17341730          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1735      call diagphy(airephy,ztit,ip_ebil_phy &
     1731     call diagphy(cell_area,ztit,ip_ebil_phy &
    17361732          , zero_v, zero_v, zero_v, zero_v, zero_v &
    17371733          , zero_v, zero_v, zero_v, ztsol &
     
    17771773  ! non nul aux poles.
    17781774  IF (abs(solarlong0-1000.)<1.e-4) then
    1779      call zenang_an(cycle_diurne,jH_cur,rlat,rlon,rmu0,fract)
     1775     call zenang_an(cycle_diurne,jH_cur,lat_degrees,lon_degrees,rmu0,fract)
    17801776  ELSE
    17811777     !  Avec ou sans cycle diurne
    17821778     IF (cycle_diurne) THEN
    17831779        zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
    1784         CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract)
     1780        CALL zenang(zlongi,jH_cur,zdtime,lat_degrees,lon_degrees,rmu0,fract)
    17851781     ELSE
    1786         CALL angle(zlongi, rlat, fract, rmu0)
     1782        CALL angle(zlongi, lat_degrees, fract, rmu0)
    17871783     ENDIF
    17881784  ENDIF
     
    18541850          dtime,     date0,     itap,    days_elapsed+1, &
    18551851          debut,     lafin, &
    1856           rlon,      rlat,      rugoro,  rmu0,      &
     1852          lon_degrees,      lat_degrees,      rugoro,  rmu0,      &
    18571853          zsig,      sollwdown, pphi,    cldt,      &
    18581854          rain_fall, snow_fall, solsw,   sollw,     &
     
    19741970     IF (ip_ebil_phy.ge.2) THEN
    19751971        ztit='after surface_main'
    1976         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     1972        CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    19771973             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    19781974             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1979         call diagphy(airephy,ztit,ip_ebil_phy &
     1975        call diagphy(cell_area,ztit,ip_ebil_phy &
    19801976             , zero_v, zero_v, zero_v, zero_v, sens &
    19811977             , evap  , zero_v, zero_v, ztsol &
     
    20242020  ENDDO
    20252021  IF (check) THEN
    2026      za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2022     za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
    20272023     WRITE(lunout,*) "avantcon=", za
    20282024  ENDIF
     
    20442040  DO k = 1, klev
    20452041     DO i = 1, klon
    2046         omega(i,k) = RG*flxmass_w(i,k) / airephy(i)
     2042        omega(i,k) = RG*flxmass_w(i,k) / cell_area(i)
    20472043     END DO
    20482044  END DO
     
    23772373  IF (ip_ebil_phy.ge.2) THEN
    23782374     ztit='after convect'
    2379      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2375     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    23802376          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    23812377          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2382      call diagphy(airephy,ztit,ip_ebil_phy &
     2378     call diagphy(cell_area,ztit,ip_ebil_phy &
    23832379          , zero_v, zero_v, zero_v, zero_v, zero_v &
    23842380          , zero_v, rain_con, snow_con, ztsol &
     
    23882384  !
    23892385  IF (check) THEN
    2390      za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2386     za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
    23912387     WRITE(lunout,*)"aprescon=", za
    23922388     zx_t = 0.0
    23932389     za = 0.0
    23942390     DO i = 1, klon
    2395         za = za + airephy(i)/REAL(klon)
     2391        za = za + cell_area(i)/REAL(klon)
    23962392        zx_t = zx_t + (rain_con(i)+ &
    2397              snow_con(i))*airephy(i)/REAL(klon)
     2393             snow_con(i))*cell_area(i)/REAL(klon)
    23982394     ENDDO
    23992395     zx_t = zx_t/za*dtime
     
    25422538  IF (ip_ebil_phy.ge.2) THEN
    25432539     ztit='after wake'
    2544      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2540     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    25452541          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    25462542          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2547      call diagphy(airephy,ztit,ip_ebil_phy &
     2543     call diagphy(cell_area,ztit,ip_ebil_phy &
    25482544          , zero_v, zero_v, zero_v, zero_v, zero_v &
    25492545          , zero_v, zero_v, zero_v, ztsol &
     
    26352631             ,ztv,zpspsk,ztla,zthl &
    26362632             !cc nrlmd le 10/04/2012
    2637              ,pbl_tke_input,pctsrf,omega,airephy &
     2633             ,pbl_tke_input,pctsrf,omega,cell_area &
    26382634             ,zlcl_th,fraca0,w0,w_conv,therm_tke_max0,env_tke_max0 &
    26392635             ,n2,s2,ale_bl_stat &
     
    28582854  IF (ip_ebil_phy.ge.2) THEN
    28592855     ztit='after dry_adjust'
    2860      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2856     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    28612857          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    28622858          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2863      call diagphy(airephy,ztit,ip_ebil_phy &
     2859     call diagphy(cell_area,ztit,ip_ebil_phy &
    28642860          , zero_v, zero_v, zero_v, zero_v, zero_v &
    28652861          , zero_v, zero_v, zero_v, ztsol &
     
    29112907  ENDDO
    29122908  IF (check) THEN
    2913      za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2909     za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
    29142910     WRITE(lunout,*)"apresilp=", za
    29152911     zx_t = 0.0
    29162912     za = 0.0
    29172913     DO i = 1, klon
    2918         za = za + airephy(i)/REAL(klon)
     2914        za = za + cell_area(i)/REAL(klon)
    29192915        zx_t = zx_t + (rain_lsc(i) &
    2920              + snow_lsc(i))*airephy(i)/REAL(klon)
     2916             + snow_lsc(i))*cell_area(i)/REAL(klon)
    29212917     ENDDO
    29222918     zx_t = zx_t/za*dtime
     
    29262922  IF (ip_ebil_phy.ge.2) THEN
    29272923     ztit='after fisrt'
    2928      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2924     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    29292925          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    29302926          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2931      call diagphy(airephy,ztit,ip_ebil_phy &
     2927     call diagphy(cell_area,ztit,ip_ebil_phy &
    29322928          , zero_v, zero_v, zero_v, zero_v, zero_v &
    29332929          , zero_v, rain_lsc, snow_lsc, ztsol &
     
    31703166  IF (ip_ebil_phy.ge.2) THEN
    31713167     ztit="after diagcld"
    3172      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3168     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    31733169          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    31743170          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3175      call diagphy(airephy,ztit,ip_ebil_phy &
     3171     call diagphy(cell_area,ztit,ip_ebil_phy &
    31763172          , zero_v, zero_v, zero_v, zero_v, zero_v &
    31773173          , zero_v, zero_v, zero_v, ztsol &
     
    32393235        CALL AEROSOL_METEO_CALC( &
    32403236             calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs, &
    3241              prfl,psfl,pctsrf,airephy,rlat,rlon,u10m,v10m)
     3237             prfl,psfl,pctsrf,cell_area,lat_degrees,lon_degrees,u10m,v10m)
    32423238     END IF
    32433239
     
    32483244          jH_cur, &
    32493245          pctsrf(1,1), &
    3250           rlat, &
    3251           rlon, &
    3252           airephy, &
     3246          lat_degrees, &
     3247          lon_degrees, &
     3248          cell_area, &
    32533249          paprs, &
    32543250          pplay, &
     
    33603356        DO i=1,klon
    33613357           !
    3362            if (rlon(i).ge.lon1_beta.AND.rlon(i).le.lon2_beta.AND. &
    3363                 rlat(i).le.lat1_beta.AND.rlat(i).ge.lat2_beta) THEN
     3358           if (lon_degrees(i).ge.lon1_beta.AND.lat_degrees(i).le.lon2_beta.AND. &
     3359                lat_degrees(i).le.lat1_beta.AND.lat_degrees(i).ge.lat2_beta) THEN
    33643360              if (pplay(i,k).GE.pfree) THEN
    33653361                 beta(i,k) = beta_pbl
     
    35823578  IF (ip_ebil_phy.ge.2) THEN
    35833579     ztit='after rad'
    3584      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3580     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    35853581          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    35863582          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3587      call diagphy(airephy,ztit,ip_ebil_phy &
     3583     call diagphy(cell_area,ztit,ip_ebil_phy &
    35883584          , topsw, toplw, solsw, sollw, zero_v &
    35893585          , zero_v, zero_v, zero_v, ztsol &
     
    36813677
    36823678        CALL lift_noro_strato(klon,klev,dtime,paprs,pplay, &
    3683              rlat,zmea,zstd,zpic,zgam,zthe,zpic,zval, &
     3679             lat_degrees,zmea,zstd,zpic,zgam,zthe,zpic,zval, &
    36843680             igwd,idx,itest, &
    36853681             t_seri, u_seri, v_seri, &
     
    36893685     ELSE
    36903686        CALL lift_noro(klon,klev,dtime,paprs,pplay, &
    3691              rlat,zmea,zstd,zpic, &
     3687             lat_degrees,zmea,zstd,zpic, &
    36923688             itest, &
    36933689             t_seri, u_seri, v_seri, &
     
    37073703
    37083704     CALL hines_gwd(klon,klev,dtime,paprs,pplay, &
    3709           rlat,t_seri,u_seri,v_seri, &
     3705          lat_degrees,t_seri,u_seri,v_seri, &
    37103706          zustrhi,zvstrhi, &
    37113707          d_t_hin, d_u_hin, d_v_hin)
     
    37513747     CALL aaam_bud (27,klon,klev,jD_cur-jD_ref,jH_cur, &
    37523748          ra,rg,romega, &
    3753           rlat,rlon,pphis, &
     3749          lat_degrees,lon_degrees,pphis, &
    37543750          zustrdr,zustrli,zustrph, &
    37553751          zvstrdr,zvstrli,zvstrph, &
     
    37613757  IF (ip_ebil_phy.ge.2) THEN
    37623758     ztit='after orography'
    3763      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3759     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    37643760          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    37653761          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3766      call diagphy(airephy,ztit,ip_ebil_phy &
     3762     call diagphy(cell_area,ztit,ip_ebil_phy &
    37673763          , zero_v, zero_v, zero_v, zero_v, zero_v &
    37683764          , zero_v, zero_v, zero_v, ztsol &
     
    37983794             ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, &
    37993795             ecrit_mth,ecrit_day,ecrit_hf, ok_all_xml, &
    3800              klon,klev,rlon,rlat,presnivs,overlap, &
     3796             klon,klev,lon_degrees,lat_degrees,presnivs,overlap, &
    38013797             fract,ref_liq,ref_ice, &
    38023798             pctsrf(:,is_ter)+pctsrf(:,is_lic), &
     
    38423838       zustar,   zu10m,     zv10m, &
    38433839       wstar(:,is_ave),    ale_bl,         ale_wake, &
    3844        rlat,     rlon, &
     3840       lat_degrees,     lon_degrees, &
    38453841       frac_impa,frac_nucl, beta_prec_fisrt,beta_prec, &
    38463842       presnivs, pphis,     pphi,     albsol1, &
     
    38633859          print*,'Attention on met a 0 les thermiques pour phystoke'
    38643860     call phystokenc ( &
    3865           nlon,klev,pdtphys,rlon,rlat, &
     3861          nlon,klev,pdtphys,lon_degrees,lat_degrees, &
    38663862          t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
    38673863          fm_therm,entr_therm, &
    38683864          cdragh,coefh(1:klon,1:klev,is_ave),u1,v1,ftsol,pctsrf, &
    38693865          frac_impa, frac_nucl, &
    3870           pphis,airephy,dtime,itap, &
     3866          pphis,cell_area,dtime,itap, &
    38713867          qx(:,:,ivap),da,phi,mp,upwd,dnwd)
    38723868
     
    39083904  IF (ip_ebil_phy.ge.1) THEN
    39093905     ztit='after physic'
    3910      CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
     3906     CALL diagetpq(cell_area,ztit,ip_ebil_phy,1,1,dtime &
    39113907          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    39123908          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    39163912     !     Donc la somme de ces 2 variations devrait etre nulle.
    39173913
    3918      call diagphy(airephy,ztit,ip_ebil_phy &
     3914     call diagphy(cell_area,ztit,ip_ebil_phy &
    39193915          , topsw, toplw, solsw, sollw, sens &
    39203916          , evap, rain_fall, snow_fall, ztsol &
     
    39643960          paprs, &
    39653961          q_seri, &
    3966           airephy, &
     3962          cell_area, &
    39673963          pphi, &
    39683964          pphis, &
Note: See TracChangeset for help on using the changeset viewer.