Ignore:
Timestamp:
Aug 21, 2015, 9:23:13 AM (9 years ago)
Author:
Ehouarn Millour
Message:

Physics/dynamics separation: get rid of all the 'include "temps.h"' in the physics; variables in module time_phylmdz_mod must be used instead. Also added JD_cur, JH_cur and JD_ref in module phys_cal_mod, in preparation for having physics handle its calendar internally.
EM

File:
1 edited

Legend:

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

    r2343 r2344  
    33
    44SUBROUTINE physiq (nlon,nlev, &
    5      debut,lafin,jD_cur, jH_cur,pdtphys, &
     5     debut,lafin,jD_cur_,jH_cur_,pdtphys_, &
    66     paprs,pplay,pphi,pphis,presnivs, &
    77     u,v,rot,t,qx, &
     
    1414  USE comgeomphy
    1515  USE phys_cal_mod, only: year_len, mth_len, days_elapsed, jh_1jan, year_cur, &
    16        mth_cur, phys_cal_update
     16       mth_cur,jD_cur, jH_cur, jD_ref, phys_cal_update
    1717  USE write_field_phy
    1818  USE dimphy
    1919  USE infotrac_phy, ONLY: nqtot, nbtr, nqo, type_trac
    20   USE mod_grid_phy_lmdz
     20  USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, nbp_lev, klon_glo
    2121  USE mod_phys_lmdz_para
    2222  USE iophy
     
    4848  use radlwsw_m, only: radlwsw
    4949  use phyaqua_mod, only: zenang_an
     50  USE time_phylmdz_mod, only: day_step_phy, annee_ref, day_ref, itau_phy, &
     51                              start_time, pdtphys
    5052  USE control_mod, ONLY: config_inca
    5153#ifdef CPP_XIOS
     
    114116  !! d_ps----output-R-tendance physique de la pression au sol
    115117  !!======================================================================
    116   include "dimensions.h"
    117118  integer jjmp1
    118   parameter (jjmp1=jjm+1-1/jjm)
    119   integer iip1
    120   parameter (iip1=iim+1)
     119!  parameter (jjmp1=jjm+1-1/jjm) ! => (jjmp1=nbp_lat-1/(nbp_lat-1))
     120!  integer iip1
     121!  parameter (iip1=iim+1)
    121122
    122123  include "regdim.h"
    123124  include "dimsoil.h"
    124125  include "clesphys.h"
    125   include "temps.h"
    126126  include "thermcell.h"
    127127  !======================================================================
     
    219219  INTEGER nlon
    220220  INTEGER nlev
    221   REAL, intent(in):: jD_cur, jH_cur
    222 
    223   REAL pdtphys
     221  REAL, intent(in):: jD_cur_, jH_cur_
     222! JD_cur and JH_cur to be used in physics are in phys_cal_mod
     223  REAL,INTENT(IN) :: pdtphys_
     224! NB: pdtphys to be used in physics is in time_phylmdz_mod
    224225  LOGICAL debut, lafin
    225226  REAL paprs(klon,klev+1)
     
    509510  SAVE lmt_pas                ! frequence de mise a jour
    510511  !$OMP THREADPRIVATE(lmt_pas)
    511   real zmasse(klon, llm),exner(klon, llm)
     512  real zmasse(klon, nbp_lev),exner(klon, nbp_lev)
    512513  !     (column-density of mass of air in a cell, in kg m-2)
    513514  real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
     
    694695  REAL tabcntr0( length       )
    695696  !
    696   INTEGER ndex2d(iim*jjmp1)
     697  INTEGER ndex2d(nbp_lon*nbp_lat)
    697698  !IM
    698699  !
     
    706707  !IM 141004 END
    707708  !IM 190504 BEG
    708   INTEGER ij, imp1jmp1
    709   PARAMETER(imp1jmp1=(iim+1)*jjmp1)
     709  INTEGER ij
     710!  INTEGER imp1jmp1
     711!  PARAMETER(imp1jmp1=(iim+1)*jjmp1)
    710712  !ym A voir plus tard
    711   REAL zx_tmp(imp1jmp1), airedyn(iim+1,jjmp1)
    712   REAL padyn(iim+1,jjmp1,klev+1)
    713   REAL dudyn(iim+1,jjmp1,klev)
    714   REAL rlatdyn(iim+1,jjmp1)
     713  REAL zx_tmp((nbp_lon+1)*nbp_lat)
     714  REAL airedyn(nbp_lon+1,nbp_lat)
     715  REAL padyn(nbp_lon+1,nbp_lat,klev+1)
     716  REAL dudyn(nbp_lon+1,nbp_lat,klev)
     717  REAL rlatdyn(nbp_lon+1,nbp_lat)
    715718  !IM 190504 END
    716719  LOGICAL ok_msk
     
    724727  REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
    725728  REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D
    726   REAL zx_tmp_2d(iim,jjmp1)
    727   REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
     729  REAL zx_tmp_2d(nbp_lon,nbp_lat)
     730  REAL zx_lon(nbp_lon,nbp_lat)
     731  REAL zx_lat(nbp_lon,nbp_lat)
    728732  !
    729733  INTEGER nid_day_seri, nid_ctesGCM
     
    900904!albedo SB <<<
    901905
     906  ! Ehouarn: set value of jjmp1 since it is no longer a "fixed parameter"
     907  jjmp1=nbp_lat
     908
    902909  !======================================================================
    903910  ! Gestion calendrier : mise a jour du module phys_cal_mod
    904911  !
     912  JD_cur=JD_cur_
     913  JH_cur=JH_cur_
     914  pdtphys=pdtphys_
    905915  CALL phys_cal_update(jD_cur,jH_cur)
    906916
     
    9921002
    9931003  torsfc=0.
    994   forall (k=1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
     1004  forall (k=1: nbp_lev) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
    9951005
    9961006
     
    18321842
    18331843  if (mydebug) then
    1834      call writefield_phy('u_seri',u_seri,llm)
    1835      call writefield_phy('v_seri',v_seri,llm)
    1836      call writefield_phy('t_seri',t_seri,llm)
    1837      call writefield_phy('q_seri',q_seri,llm)
     1844     call writefield_phy('u_seri',u_seri,nbp_lev)
     1845     call writefield_phy('v_seri',v_seri,nbp_lev)
     1846     call writefield_phy('t_seri',t_seri,nbp_lev)
     1847     call writefield_phy('q_seri',q_seri,nbp_lev)
    18381848  endif
    18391849
     
    19781988
    19791989     if (mydebug) then
    1980         call writefield_phy('u_seri',u_seri,llm)
    1981         call writefield_phy('v_seri',v_seri,llm)
    1982         call writefield_phy('t_seri',t_seri,llm)
    1983         call writefield_phy('q_seri',q_seri,llm)
     1990        call writefield_phy('u_seri',u_seri,nbp_lev)
     1991        call writefield_phy('v_seri',v_seri,nbp_lev)
     1992        call writefield_phy('t_seri',t_seri,nbp_lev)
     1993        call writefield_phy('q_seri',q_seri,nbp_lev)
    19841994     endif
    19851995
     
    24692479
    24702480  if (mydebug) then
    2471      call writefield_phy('u_seri',u_seri,llm)
    2472      call writefield_phy('v_seri',v_seri,llm)
    2473      call writefield_phy('t_seri',t_seri,llm)
    2474      call writefield_phy('q_seri',q_seri,llm)
     2481     call writefield_phy('u_seri',u_seri,nbp_lev)
     2482     call writefield_phy('v_seri',v_seri,nbp_lev)
     2483     call writefield_phy('t_seri',t_seri,nbp_lev)
     2484     call writefield_phy('q_seri',q_seri,nbp_lev)
    24752485  endif
    24762486
     
    30393049
    30403050  if (mydebug) then
    3041      call writefield_phy('u_seri',u_seri,llm)
    3042      call writefield_phy('v_seri',v_seri,llm)
    3043      call writefield_phy('t_seri',t_seri,llm)
    3044      call writefield_phy('q_seri',q_seri,llm)
     3051     call writefield_phy('u_seri',u_seri,nbp_lev)
     3052     call writefield_phy('v_seri',v_seri,nbp_lev)
     3053     call writefield_phy('t_seri',t_seri,nbp_lev)
     3054     call writefield_phy('q_seri',q_seri,nbp_lev)
    30453055  endif
    30463056
     
    33973407          ibas_con, &
    33983408          cldfra, &
    3399           iim, &
    3400           jjm, &
     3409          nbp_lon, &
     3410          nbp_lat-1, &
    34013411          tr_seri, &
    34023412          ftsol, &
     
    35253535
    35263536     if (mydebug) then
    3527         call writefield_phy('u_seri',u_seri,llm)
    3528         call writefield_phy('v_seri',v_seri,llm)
    3529         call writefield_phy('t_seri',t_seri,llm)
    3530         call writefield_phy('q_seri',q_seri,llm)
     3537        call writefield_phy('u_seri',u_seri,nbp_lev)
     3538        call writefield_phy('v_seri',v_seri,nbp_lev)
     3539        call writefield_phy('t_seri',t_seri,nbp_lev)
     3540        call writefield_phy('q_seri',q_seri,nbp_lev)
    35313541     endif
    35323542
     
    37163726  !
    37173727  if (mydebug) then
    3718      call writefield_phy('u_seri',u_seri,llm)
    3719      call writefield_phy('v_seri',v_seri,llm)
    3720      call writefield_phy('t_seri',t_seri,llm)
    3721      call writefield_phy('q_seri',q_seri,llm)
     3728     call writefield_phy('u_seri',u_seri,nbp_lev)
     3729     call writefield_phy('v_seri',v_seri,nbp_lev)
     3730     call writefield_phy('t_seri',t_seri,nbp_lev)
     3731     call writefield_phy('q_seri',q_seri,nbp_lev)
    37223732  endif
    37233733
     
    38013811  !
    38023812  if (mydebug) then
    3803      call writefield_phy('u_seri',u_seri,llm)
    3804      call writefield_phy('v_seri',v_seri,llm)
    3805      call writefield_phy('t_seri',t_seri,llm)
    3806      call writefield_phy('q_seri',q_seri,llm)
     3813     call writefield_phy('u_seri',u_seri,nbp_lev)
     3814     call writefield_phy('v_seri',v_seri,nbp_lev)
     3815     call writefield_phy('t_seri',t_seri,nbp_lev)
     3816     call writefield_phy('q_seri',q_seri,nbp_lev)
    38073817  endif
    38083818
     
    39093919
    39103920  if (mydebug) then
    3911      call writefield_phy('u_seri',u_seri,llm)
    3912      call writefield_phy('v_seri',v_seri,llm)
    3913      call writefield_phy('t_seri',t_seri,llm)
    3914      call writefield_phy('q_seri',q_seri,llm)
     3921     call writefield_phy('u_seri',u_seri,nbp_lev)
     3922     call writefield_phy('v_seri',v_seri,nbp_lev)
     3923     call writefield_phy('t_seri',t_seri,nbp_lev)
     3924     call writefield_phy('q_seri',q_seri,nbp_lev)
    39153925  endif
    39163926
     
    40824092
    40834093  d_t_ec(:,:)=0.
    4084   forall (k=1: llm) exner(:, k) = (pplay(:, k)/paprs(:,1))**RKAPPA
     4094  forall (k=1: nbp_lev) exner(:, k) = (pplay(:, k)/paprs(:,1))**RKAPPA
    40854095  CALL ener_conserv(klon,klev,pdtphys,u,v,t,qx(:,:,ivap), &
    40864096       u_seri,v_seri,t_seri,q_seri,pbl_tke(:,:,is_ave)-tke0(:,:), &
     
    41784188  !
    41794189  if (mydebug) then
    4180      call writefield_phy('u_seri',u_seri,llm)
    4181      call writefield_phy('v_seri',v_seri,llm)
    4182      call writefield_phy('t_seri',t_seri,llm)
    4183      call writefield_phy('q_seri',q_seri,llm)
     4190     call writefield_phy('u_seri',u_seri,nbp_lev)
     4191     call writefield_phy('v_seri',v_seri,nbp_lev)
     4192     call writefield_phy('t_seri',t_seri,nbp_lev)
     4193     call writefield_phy('q_seri',q_seri,nbp_lev)
    41844194  endif
    41854195
Note: See TracChangeset for help on using the changeset viewer.