Ignore:
Timestamp:
Aug 25, 2015, 5:14:59 PM (9 years ago)
Author:
Ehouarn Millour
Message:

More on physics/dynamics separation and cleanup:

  • Set things up so that all physics-related initializations are done via iniphysiq.
  • Created a "geometry_mod.F90" module in phy_common to store information on the loacl grid (i.e. replaces comgeomphy) and moreover give these variables more obvious names (e.g.: rlond => longitude, rlatd => latitude, airephy => cell_area).
  • removed obsolete comgeomphy.h and comgeomphy.F90

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r2345 r2351  
    1212  USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, &
    1313       histwrite, ju2ymds, ymds2ju, getin
    14   USE comgeomphy
     14  USE geometry_mod, ONLY: cell_area, latitude_deg, longitude_deg
    1515  USE phys_cal_mod, only: year_len, mth_len, days_elapsed, jh_1jan, year_cur, &
    1616       mth_cur,jD_cur, jH_cur, jD_ref, phys_cal_update
     
    923923     igout=klon/2+1/klon
    924924     write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
    925      write(lunout,*) 'igout, rlat, rlon ',igout, rlatd(igout)*180./3.141593, rlond(igout)*180./3.141593
     925     write(lunout,*) 'igout, rlat, rlon ',igout, latitude_deg(igout), longitude_deg(igout)
    926926     write(lunout,*) &
    927927          'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys'
     
    13561356             rg, &
    13571357             ra, &
    1358              airephy, &
     1358             cell_area, &
    13591359             rlat, &
    13601360             rlon, &
     
    15631563  IF (ip_ebil_phy.ge.1) THEN
    15641564     ztit='after dynamic'
    1565      CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
     1565     CALL diagetpq(cell_area,ztit,ip_ebil_phy,1,1,dtime &
    15661566          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    15671567          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    15701570     !     est egale a la variation de la physique au pas de temps precedent.
    15711571     !     Donc la somme de ces 2 variations devrait etre nulle.
    1572      call diagphy(airephy,ztit,ip_ebil_phy &
     1572     call diagphy(cell_area,ztit,ip_ebil_phy &
    15731573          , zero_v, zero_v, zero_v, zero_v, zero_v &
    15741574          , zero_v, zero_v, zero_v, ztsol &
     
    17741774  IF (ip_ebil_phy.ge.2) THEN
    17751775     ztit='after reevap'
    1776      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,1,dtime &
     1776     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,1,dtime &
    17771777          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    17781778          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1779      call diagphy(airephy,ztit,ip_ebil_phy &
     1779     call diagphy(cell_area,ztit,ip_ebil_phy &
    17801780          , zero_v, zero_v, zero_v, zero_v, zero_v &
    17811781          , zero_v, zero_v, zero_v, ztsol &
     
    20322032     IF (ip_ebil_phy.ge.2) THEN
    20332033        ztit='after surface_main'
    2034         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2034        CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    20352035             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    20362036             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2037         call diagphy(airephy,ztit,ip_ebil_phy &
     2037        call diagphy(cell_area,ztit,ip_ebil_phy &
    20382038             , zero_v, zero_v, zero_v, zero_v, sens &
    20392039             , evap  , zero_v, zero_v, ztsol &
     
    20822082  ENDDO
    20832083  IF (check) THEN
    2084      za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2084     za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
    20852085     WRITE(lunout,*) "avantcon=", za
    20862086  ENDIF
     
    21022102  DO k = 1, klev
    21032103     DO i = 1, klon
    2104         omega(i,k) = RG*flxmass_w(i,k) / airephy(i)
     2104        omega(i,k) = RG*flxmass_w(i,k) / cell_area(i)
    21052105     END DO
    21062106  END DO
     
    24882488  IF (ip_ebil_phy.ge.2) THEN
    24892489     ztit='after convect'
    2490      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2490     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    24912491          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    24922492          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2493      call diagphy(airephy,ztit,ip_ebil_phy &
     2493     call diagphy(cell_area,ztit,ip_ebil_phy &
    24942494          , zero_v, zero_v, zero_v, zero_v, zero_v &
    24952495          , zero_v, rain_con, snow_con, ztsol &
     
    24992499  !
    25002500  IF (check) THEN
    2501      za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2501     za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
    25022502     WRITE(lunout,*)"aprescon=", za
    25032503     zx_t = 0.0
    25042504     za = 0.0
    25052505     DO i = 1, klon
    2506         za = za + airephy(i)/REAL(klon)
     2506        za = za + cell_area(i)/REAL(klon)
    25072507        zx_t = zx_t + (rain_con(i)+ &
    2508              snow_con(i))*airephy(i)/REAL(klon)
     2508             snow_con(i))*cell_area(i)/REAL(klon)
    25092509     ENDDO
    25102510     zx_t = zx_t/za*dtime
     
    26532653  IF (ip_ebil_phy.ge.2) THEN
    26542654     ztit='after wake'
    2655      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2655     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    26562656          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    26572657          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2658      call diagphy(airephy,ztit,ip_ebil_phy &
     2658     call diagphy(cell_area,ztit,ip_ebil_phy &
    26592659          , zero_v, zero_v, zero_v, zero_v, zero_v &
    26602660          , zero_v, zero_v, zero_v, ztsol &
     
    27462746             ,ztv,zpspsk,ztla,zthl &
    27472747             !cc nrlmd le 10/04/2012
    2748              ,pbl_tke_input,pctsrf,omega,airephy &
     2748             ,pbl_tke_input,pctsrf,omega,cell_area &
    27492749             ,zlcl_th,fraca0,w0,w_conv,therm_tke_max0,env_tke_max0 &
    27502750             ,n2,s2,ale_bl_stat &
     
    29702970  IF (ip_ebil_phy.ge.2) THEN
    29712971     ztit='after dry_adjust'
    2972      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2972     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    29732973          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    29742974          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2975      call diagphy(airephy,ztit,ip_ebil_phy &
     2975     call diagphy(cell_area,ztit,ip_ebil_phy &
    29762976          , zero_v, zero_v, zero_v, zero_v, zero_v &
    29772977          , zero_v, zero_v, zero_v, ztsol &
     
    30233023  ENDDO
    30243024  IF (check) THEN
    3025      za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     3025     za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
    30263026     WRITE(lunout,*)"apresilp=", za
    30273027     zx_t = 0.0
    30283028     za = 0.0
    30293029     DO i = 1, klon
    3030         za = za + airephy(i)/REAL(klon)
     3030        za = za + cell_area(i)/REAL(klon)
    30313031        zx_t = zx_t + (rain_lsc(i) &
    3032              + snow_lsc(i))*airephy(i)/REAL(klon)
     3032             + snow_lsc(i))*cell_area(i)/REAL(klon)
    30333033     ENDDO
    30343034     zx_t = zx_t/za*dtime
     
    30383038  IF (ip_ebil_phy.ge.2) THEN
    30393039     ztit='after fisrt'
    3040      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3040     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    30413041          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    30423042          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3043      call diagphy(airephy,ztit,ip_ebil_phy &
     3043     call diagphy(cell_area,ztit,ip_ebil_phy &
    30443044          , zero_v, zero_v, zero_v, zero_v, zero_v &
    30453045          , zero_v, rain_lsc, snow_lsc, ztsol &
     
    33083308  IF (ip_ebil_phy.ge.2) THEN
    33093309     ztit="after diagcld"
    3310      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3310     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    33113311          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    33123312          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3313      call diagphy(airephy,ztit,ip_ebil_phy &
     3313     call diagphy(cell_area,ztit,ip_ebil_phy &
    33143314          , zero_v, zero_v, zero_v, zero_v, zero_v &
    33153315          , zero_v, zero_v, zero_v, ztsol &
     
    33773377        CALL AEROSOL_METEO_CALC( &
    33783378             calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs, &
    3379              prfl,psfl,pctsrf,airephy,rlat,rlon,u10m,v10m)
     3379             prfl,psfl,pctsrf,cell_area,rlat,rlon,u10m,v10m)
    33803380     END IF
    33813381
     
    33883388          rlat, &
    33893389          rlon, &
    3390           airephy, &
     3390          cell_area, &
    33913391          paprs, &
    33923392          pplay, &
     
    37353735  IF (ip_ebil_phy.ge.2) THEN
    37363736     ztit='after rad'
    3737      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3737     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    37383738          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    37393739          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3740      call diagphy(airephy,ztit,ip_ebil_phy &
     3740     call diagphy(cell_area,ztit,ip_ebil_phy &
    37413741          , topsw, toplw, solsw, sollw, zero_v &
    37423742          , zero_v, zero_v, zero_v, ztsol &
     
    39533953  IF (ip_ebil_phy.ge.2) THEN
    39543954     ztit='after orography'
    3955      CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3955     CALL diagetpq(cell_area,ztit,ip_ebil_phy,2,2,dtime &
    39563956          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    39573957          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3958      call diagphy(airephy,ztit,ip_ebil_phy &
     3958     call diagphy(cell_area,ztit,ip_ebil_phy &
    39593959          , zero_v, zero_v, zero_v, zero_v, zero_v &
    39603960          , zero_v, zero_v, zero_v, ztsol &
     
    40614061          cdragh,coefh(1:klon,1:klev,is_ave),u1,v1,ftsol,pctsrf, &
    40624062          frac_impa, frac_nucl, &
    4063           pphis,airephy,dtime,itap, &
     4063          pphis,cell_area,dtime,itap, &
    40644064          qx(:,:,ivap),da,phi,mp,upwd,dnwd)
    40654065
     
    41014101  IF (ip_ebil_phy.ge.1) THEN
    41024102     ztit='after physic'
    4103      CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
     4103     CALL diagetpq(cell_area,ztit,ip_ebil_phy,1,1,dtime &
    41044104          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    41054105          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    41094109     !     Donc la somme de ces 2 variations devrait etre nulle.
    41104110
    4111      call diagphy(airephy,ztit,ip_ebil_phy &
     4111     call diagphy(cell_area,ztit,ip_ebil_phy &
    41124112          , topsw, toplw, solsw, sollw, sens &
    41134113          , evap, rain_fall, snow_fall, ztsol &
     
    41694169          paprs, &
    41704170          q_seri, &
    4171           airephy, &
     4171          cell_area, &
    41724172          pphi, &
    41734173          pphis, &
Note: See TracChangeset for help on using the changeset viewer.