Ignore:
Timestamp:
Oct 3, 2023, 11:21:28 AM (15 months ago)
Author:
jbclement
Message:

Mars PCM:
In 1D, 'q' has been converted from dimension (:,:) to (1,:,:) and 'q2' is now got through the module 'turb_mod'. It allows more generalization and to match dimension in the subroutines.
JBC

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/dyn1d/testphys1d.F90

    r3066 r3067  
    11PROGRAM testphys1d
    22
    3 use comsoil_h,               only: inertiedat, inertiesoil, nsoilmx, tsoil
    4 use surfdat_h,               only: albedodat, perenial_co2ice, watercap, tsurf, emis, qsurf
    5 use comslope_mod,            only: def_slope, subslope_dist
    6 use phyredem,                only: physdem0, physdem1
    7 use watersat_mod,            only: watersat
    8 use tracer_mod,              only: igcm_h2o_vap, igcm_h2o_ice, noms
    9 use comcstfi_h,              only: pi, rad, omeg, g, mugaz, rcp, r, cpp
    10 use time_phylmdz_mod,        only: daysec, day_step
    11 use dimradmars_mod,          only: tauvis, totcloudfrac, albedo
    12 use dust_param_mod,          only: tauscaling
    13 use comvert_mod,             only: ap, bp, aps, bps, pa, preff, sig
    14 use physiq_mod,              only: physiq
    15 use phyetat0_mod,            only: phyetat0
    16 use write_output_mod,        only: write_output
    17 use init_testphys1d_mod,     only: init_testphys1d
     3use comsoil_h,           only: inertiedat, inertiesoil, nsoilmx, tsoil
     4use surfdat_h,           only: albedodat, perenial_co2ice, watercap, tsurf, emis, qsurf
     5use comslope_mod,        only: def_slope, subslope_dist
     6use phyredem,            only: physdem0, physdem1
     7use watersat_mod,        only: watersat
     8use tracer_mod,          only: igcm_h2o_vap, igcm_h2o_ice, noms
     9use comcstfi_h,          only: pi, rad, omeg, g, mugaz, rcp, r, cpp
     10use time_phylmdz_mod,    only: daysec, day_step
     11use dimradmars_mod,      only: tauvis, totcloudfrac, albedo
     12use dust_param_mod,      only: tauscaling
     13use comvert_mod,         only: ap, bp, aps, bps, pa, preff, sig
     14use physiq_mod,          only: physiq
     15use turb_mod,            only: q2
     16use write_output_mod,    only: write_output
     17use init_testphys1d_mod, only: init_testphys1d
    1818! Mostly for XIOS outputs:
    19 use mod_const_mpi,           only: init_const_mpi
    20 use parallel_lmdz,           only: init_parallel
     19use mod_const_mpi,       only: init_const_mpi
     20use parallel_lmdz,       only: init_parallel
    2121
    2222implicit none
     
    5858! Declarations
    5959!--------------------------------------------------------------
    60 integer, parameter                :: ngrid = 1     ! (2+(jjm-1)*iim - 1/jjm)
    61 integer, parameter                :: nlayer = llm
    62 real, parameter                   :: odpref = 610. ! DOD reference pressure (Pa)
    63 integer                           :: unitstart     ! unite d'ecriture de "startfi"
    64 integer                           :: ndt, ilayer, ilevel, isoil, idt, iq
    65 logical                           :: firstcall, lastcall
    66 integer                           :: day0          ! initial (sol ; =0 at Ls=0)
    67 real                              :: day           ! date during the run
    68 real                              :: time          ! time (0<time<1 ; time=0.5 a midi)
    69 real                              :: dttestphys    ! testphys1d timestep
    70 real, dimension(nlayer)           :: play          ! Pressure at the middle of the layers (Pa)
    71 real, dimension(nlayer + 1)       :: plev          ! intermediate pressure levels (pa)
    72 real                              :: psurf         ! Surface pressure
    73 real, dimension(nlayer)           :: u, v          ! zonal, meridional wind
    74 real                              :: gru, grv      ! prescribed "geostrophic" background wind
    75 real, dimension(nlayer)           :: temp          ! temperature at the middle of the layers
    76 real, dimension(:,:), allocatable :: q             ! tracer mixing ratio (e.g. kg/kg)
    77 real, dimension(1)                :: wstar = 0.    ! Thermals vertical velocity
    78 real, dimension(nlayer + 1)       :: q2            ! Turbulent Kinetic Energy
     60integer, parameter                  :: ngrid = 1     ! (2+(jjm-1)*iim - 1/jjm)
     61integer, parameter                  :: nlayer = llm
     62real, parameter                     :: odpref = 610. ! DOD reference pressure (Pa)
     63integer                             :: unitstart     ! unite d'ecriture de "startfi"
     64integer                             :: ndt, ilayer, ilevel, isoil, idt, iq
     65logical                             :: firstcall, lastcall
     66integer                             :: day0          ! initial (sol ; =0 at Ls=0)
     67real                                :: day           ! date during the run
     68real                                :: time          ! time (0<time<1 ; time=0.5 a midi)
     69real                                :: dttestphys    ! testphys1d timestep
     70real, dimension(nlayer)             :: play          ! Pressure at the middle of the layers (Pa)
     71real, dimension(nlayer + 1)         :: plev          ! intermediate pressure levels (pa)
     72real                                :: psurf         ! Surface pressure
     73real, dimension(nlayer)             :: u, v          ! zonal, meridional wind
     74real                                :: gru, grv      ! prescribed "geostrophic" background wind
     75real, dimension(nlayer)             :: temp          ! temperature at the middle of the layers
     76real, dimension(:,:,:), allocatable :: q             ! tracer mixing ratio (e.g. kg/kg)
     77real, dimension(1)                  :: wstar = 0.    ! Thermals vertical velocity
    7978
    8079! Physical and dynamical tandencies (e.g. m.s-2, K/s, Pa/s)
    81 real, dimension(nlayer)           :: du, dv, dtemp, dudyn, dvdyn, dtempdyn
    82 real, dimension(1)                :: dpsurf
    83 real, dimension(:,:), allocatable :: dq, dqdyn
     80real, dimension(nlayer)             :: du, dv, dtemp, dudyn, dvdyn, dtempdyn
     81real, dimension(1)                  :: dpsurf
     82real, dimension(:,:,:), allocatable :: dq, dqdyn
    8483
    8584! Various intermediate variables
     
    115114!call initcomgeomphy
    116115
    117 call init_testphys1d(.false.,ngrid,nlayer,odpref,nq,q,time,psurf,u,v,temp,startfiles_1D,therestart1D,therestartfi, &
    118                      ndt,ptif,pks,dttestphys,zqsat,dq,dqdyn,day0,day,gru,grv,w,q2,play,plev, &
    119                      latitude,longitude,cell_area,atm_wat_profile,atm_wat_tau)
     116call init_testphys1d(.false.,ngrid,nlayer,odpref,nq,q,time,psurf,u,v,temp,startfiles_1D,therestart1D, &
     117                     therestartfi,ndt,ptif,pks,dttestphys,zqsat,dq,dqdyn,day0,day,gru,grv,w,          &
     118                     play,plev,latitude,longitude,cell_area,atm_wat_profile,atm_wat_tau)
    120119
    121120! Write a "startfi" file
     
    171170        ! If atmospheric water is monitored
    172171            if (atm_wat_tau < 0.) then ! Prescribed atm_wat_profile: wet if >0, dry if =0
    173                 q(:,igcm_h2o_vap) = min(zqsat(:),atm_wat_profile*g/psurf)
    174                 q(:,igcm_h2o_ice) = 0. ! reset h2o ice
     172                q(1,:,igcm_h2o_vap) = min(zqsat(:),atm_wat_profile*g/psurf)
     173                q(1,:,igcm_h2o_ice) = 0. ! reset h2o ice
    175174            else ! Relaxation towards the value atm_wat_profile with relaxation time atm_wat_tau
    176                 q(:,igcm_h2o_vap) = atm_wat_profile*g/psurf + (q(:,igcm_h2o_vap) - atm_wat_profile*g/psurf)*dexp(-dttestphys/atm_wat_tau)
    177                 q(:,igcm_h2o_vap) = min(zqsat(:),q(:,igcm_h2o_vap))
    178                 q(:,igcm_h2o_ice) = 0. ! reset h2o ice
     175                q(1,:,igcm_h2o_vap) = atm_wat_profile*g/psurf + (q(1,:,igcm_h2o_vap) - atm_wat_profile*g/psurf)*dexp(-dttestphys/atm_wat_tau)
     176                q(1,:,igcm_h2o_vap) = min(zqsat(:),q(1,:,igcm_h2o_vap))
     177                q(1,:,igcm_h2o_ice) = 0. ! reset h2o ice
    179178            endif
    180179        endif
     
    195194    !enddo
    196195    ! For some tests: No coriolis force at equator
    197     !if(latitude(1) == 0.) then
     196    !if (latitude(1) == 0.) then
    198197    du(:) = du(:) + (gru - u(:))/1.e4
    199198    dv(:) = dv(:) + (grv - v(:))/1.e4
     
    222221
    223222    ! Increment tracers
    224     q(:,:) = q(:,:) + dttestphys*dq(:,:)
     223    q(1,:,:) = q(1,:,:) + dttestphys*dq(1,:,:)
    225224enddo ! End of time stepping loop (idt=1,ndt)
    226225
Note: See TracChangeset for help on using the changeset viewer.