Changeset 234 for trunk/MESOSCALE


Ignore:
Timestamp:
Jul 19, 2011, 5:25:58 PM (13 years ago)
Author:
aslmd
Message:

LMDZ.MARS
+ MESOSCALE

  • An important change to merge physiq.F and inifis.F for GCM and mesoscale
  • This is mostly transparent to GCM users and developers (use of MESOSCALE precompiler flags)
  • Makes it easy (and mostly automatic!) for changes in GCM physics to be impacted in mesoscale physics
  • A few minor changes have followed in the GCM (slope scheme, one-point diagnostic).
  • Compilation + run is OK on both sides (GCM and mesoscale).
  • On the mesoscale side, call_meso_physiq?.inc and call_meso_inifis?.inc have been changed accordingly.

Here is the excerpt from README file:

19/07/2011 == AS

  • Finished converging meso_physiq.F and meso_inifis.F towards physiq.F and inifis.F --> see previous point 15/07/2011 --> meso_ routines no longer exist (everything is in meso_inc and transparent to GCM users) --> GCM routines include mesoscale parts within MESOSCALE precompiler commands --> MESOSCALE parts are as hidden as possible not to mess up with GCM users/developers
  • Cleaned inelegant or useless #ifdef [or] #ifndef MESOSCALE in physiq and inifis so that a minimum amount of such precompiler commands is now reached [mainly related to I/O]
  • Added the SF08 slope insolation model in the general physics parameterizations. Added a callslope keyword in inifis.F and callkeys.h --> This keyword is False by default / True if you use -DMESOSCALE
  • Removed the obsolete call to Viking Lander 1 diagnostic Replaced it with a diagnostic for opacity at the domain center [valid for GCM and mesoscale]
Location:
trunk/MESOSCALE
Files:
3 added
2 deleted
9 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/MESOSCALE/LMDZ.MARS.new/in_lmdz_mars_newphys/compile

    r226 r234  
    3434nz=25
    3535##################
    36 
    37 
     36scatterers=2
     37scatterers=1
    3838
    3939
     
    6262echo compile gcm
    6363echo check in $PWD/libo/log_compile_gcm
    64 makegcm -t ${tracers} -p mars -d ${nx}x${ny}x${nz} gcm | tee libo/log_compile_gcm | grep 'warnings' >> libo/log_compile_gcm
     64makegcm -t ${tracers} -p mars -d ${nx}x${ny}x${nz} -s ${scatterers} gcm | tee libo/log_compile_gcm | grep 'warnings' >> libo/log_compile_gcm
    6565
    6666echo well, OK.
  • trunk/MESOSCALE/LMDZ.MARS.new/in_lmdz_mars_newphys/physiq.F

    r226 r234  
    77     $            ,pw
    88     $            ,pdu,pdv,pdt,pdq,pdpsrf,tracerdyn
     9#ifdef MESOSCALE
     10#include "meso_inc/meso_inc_invar.F"
     11#endif
    912     $            )
    1013
     
    6164c           Radiatively active tracers: J.-B. Madeleine (10/2008-06/2009)
    6265c             Nb: See callradite.F for more information.
     66c           Mesoscale lines: Aymeric Spiga (2007 - 2011) -- check MESOSCALE flags
    6367c           
    6468c   arguments:
     
    131135#include "netcdf.inc"
    132136
    133 
     137#include "slope.h"
     138
     139#ifdef MESOSCALE
     140#include "wrf_output_2d.h"
     141#include "wrf_output_3d.h"
     142#include "advtrac.h"   !!! this is necessary for tracers (in dyn3d)
     143#include "meso_inc/meso_inc_var.F"
     144#endif
    134145
    135146c Arguments :
     
    181192      REAL qsurf(ngridmx,nqmx)       ! tracer on surface (e.g. kg.m-2)
    182193      REAL q2(ngridmx,nlayermx+1)    ! Turbulent Kinetic Energy
    183       INTEGER ig_vl1                 ! Grid Point near VL1   (for diagnostic)
    184194
    185195c     Variables used by the water ice microphysical scheme:
     
    191201      REAL, PARAMETER :: alb_surfice = 0.45 !!TESTS_JB
    192202
     203c     Variables used by the slope model
     204      REAL sl_ls, sl_lct, sl_lat
     205      REAL sl_tau, sl_alb, sl_the, sl_psi
     206      REAL sl_fl0, sl_flu
     207      REAL sl_ra, sl_di0
     208      REAL sky
     209
    193210      SAVE day_ini, icount
    194211      SAVE aerosol, tsurf,tsoil
    195212      SAVE co2ice,albedo,emis, q2
    196213      SAVE capcal,fluxgrd,dtrad,fluxrad,fluxrad_sky,qsurf
    197       SAVE ig_vl1
    198214
    199215      REAL stephan   
     
    306322      REAL lmax_th_out(ngridmx),zmax_th(ngridmx)
    307323      REAL wmax_th(ngridmx)
    308       REAL ,SAVE :: hfmax_th(ngridmx)
     324      REAL, SAVE :: hfmax_th(ngridmx)
    309325      REAL pdu_th(ngridmx,nlayermx),pdv_th(ngridmx,nlayermx)
    310326      REAL pdt_th(ngridmx,nlayermx),pdq_th(ngridmx,nlayermx,nqmx)
     
    330346c        read startfi
    331347c        ~~~~~~~~~~~~
    332 
     348#ifndef MESOSCALE
    333349! Read netcdf initial physical parameters.
    334350         CALL phyetat0 ("startfi.nc",0,0,
     
    336352     &         day_ini,time_phys,
    337353     &         tsurf,tsoil,emis,q2,qsurf,co2ice)
     354#else
     355#include "meso_inc/meso_inc_ini.F"
     356#endif
    338357
    339358         if (pday.ne.day_ini) then
     
    375394         ENDIF  ! end tracer
    376395
    377 c        Determining gridpoint near Viking Lander 1 (used for diagnostic only)
    378 c        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    379 
    380          if(ngrid.ne.1) then
    381            latvl1= 22.27
    382            lonvl1= -47.94
    383            ig_vl1= 1+ int( (1.5-(latvl1-90.)*jjm/180.)  -2 )*iim +
    384      &              int(1.5+(lonvl1+180)*iim/360.)
    385            write(*,*) 'Viking Lander 1 GCM point: lat,lon',
    386      &              lati(ig_vl1)*180/pi, long(ig_vl1)*180/pi
    387          end if
    388 
     396#ifdef MESOSCALE
     397#include "meso_inc/meso_inc_caps.F"
     398#endif
     399
     400#ifndef MESOSCALE
    389401c        Initialize thermospheric parameters
    390402c        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    391403
    392404         if (callthermos) call param_read
    393 
     405#endif
    394406c        Initialize R and Cp as constant
    395407
     
    478490      ENDDO
    479491
     492#ifndef MESOSCALE
    480493c-----------------------------------------------------------------------
    481494c    1.2.5 Compute mean mass, cp, and R
     
    485498         call concentrations(pplay,pt,pdt,pq,pdq,ptimestep)
    486499      endif
     500#endif
    487501c-----------------------------------------------------------------------
    488502c    2. Compute radiative tendencies :
     
    532546     $     zdtlw,zdtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw,fluxtop_sw,
    533547     &     tauref,tau,aerosol,ccn,rdust,rice,nuice)
     548
     549c          Outputs for basic check (middle of domain)
     550c          ------------------------------------------
     551           print*, 'check lat lon', lati(igout)*180/pi,
     552     .                              long(igout)*180/pi
     553           print*, 'Ls =',zls*180./pi
     554           print*, 'tauref(700 Pa) =',tauref(igout)
     555           print*, 'tau(700 Pa) =',tau(igout,1)*700./pplev(igout,1)
     556
     557c          ---------------------------------------------------------
     558c          Call slope parameterization for direct and scattered flux
     559c          ---------------------------------------------------------
     560           IF(callslope) THEN
     561            print *, 'Slope scheme is on and computing...'
     562            DO ig=1,ngrid 
     563              sl_the = theta_sl(ig)
     564              IF (sl_the .ne. 0.) THEN
     565                ztim1=fluxsurf_sw(ig,1)+fluxsurf_sw(ig,2)
     566                DO l=1,2
     567                 sl_lct = ptime*24. + 180.*long(ig)/pi/15.
     568                 sl_ra  = pi*(1.0-sl_lct/12.)
     569                 sl_lat = 180.*lati(ig)/pi
     570                 sl_tau = tau(ig,1)
     571                 sl_alb = albedo(ig,l)
     572                 sl_psi = psi_sl(ig)
     573                 sl_fl0 = fluxsurf_sw(ig,l)
     574                 sl_di0 = 0.
     575                 if (mu0(ig) .gt. 0.) then
     576                  sl_di0 = mu0(ig)*(exp(-sl_tau/mu0(ig)))
     577                  sl_di0 = sl_di0*1370./dist_sol/dist_sol
     578                  sl_di0 = sl_di0/ztim1
     579                  sl_di0 = fluxsurf_sw(ig,l)*sl_di0
     580                 endif
     581                 ! you never know (roundup concern...)
     582                 if (sl_fl0 .lt. sl_di0) sl_di0=sl_fl0
     583                 !!!!!!!!!!!!!!!!!!!!!!!!!!
     584                 CALL param_slope( mu0(ig), declin, sl_ra, sl_lat,
     585     &                             sl_tau, sl_alb, sl_the, sl_psi,
     586     &                             sl_di0, sl_fl0, sl_flu )
     587                 !!!!!!!!!!!!!!!!!!!!!!!!!!
     588                 fluxsurf_sw(ig,l) = sl_flu
     589                ENDDO
     590              !!! compute correction on IR flux as well
     591              sky= (1.+cos(pi*theta_sl(ig)/180.))/2.
     592              fluxsurf_lw(ig)= fluxsurf_lw(ig)*sky
     593              ENDIF
     594            ENDDO
     595           ENDIF
    534596
    535597c          CO2 near infrared absorption
     
    577639     $         stephan*zplanck(ig)*zplanck(ig)
    578640               fluxrad(ig)=fluxrad_sky(ig)-zplanck(ig)
     641               IF(callslope) THEN
     642                 sky= (1.+cos(pi*theta_sl(ig)/180.))/2.
     643                 fluxrad(ig)=fluxrad(ig)+(1.-sky)*zplanck(ig)
     644               ENDIF
    579645           ENDDO
    580646
     
    633699     &        zdqdif,zdqsdif)
    634700
     701#ifdef MESOSCALE
     702#include "meso_inc/meso_inc_les.F"
     703#endif
    635704         DO l=1,nlayer
    636705            DO ig=1,ngrid
     
    668737     s      (fluxrad(ig)+fluxgrd(ig))/capcal(ig)
    669738         ENDDO
     739#ifdef MESOSCALE
     740         IF (flag_LES) THEN
     741            write(*,*) 'LES mode !'
     742            write(*,*) 'Please set calldifv to T in callphys.def'
     743            STOP
     744         ENDIF
     745#endif
    670746      ENDIF ! of IF (calldifv)
    671747
     
    840916c     ------------------
    841917
     918#ifndef MESOSCALE
    842919c        --------------
    843920c        photochemistry :
     
    884961
    885962         END IF  ! of IF (photochem.or.thermochem)
     963#endif
    886964
    887965c   7c. Aerosol particles
     
    9551033      endif !  of if (tracer)
    9561034
    957 
     1035#ifndef MESOSCALE
    9581036c-----------------------------------------------------------------------
    9591037c   8. THERMOSPHERE CALCULATION
     
    9801058
    9811059      endif ! of if (callthermos)
     1060#endif
    9821061
    9831062c-----------------------------------------------------------------------
     
    9981077
    9991078      IF (tracer.AND.water.AND.(ngridmx.NE.1)) THEN
     1079#ifndef MESOSCALE
    10001080         if (caps.and.(obliquit.lt.27.)) then
    10011081           ! NB: Updated surface pressure, at grid point 'ngrid', is
     
    10041084     &                     (pplev(ngrid,1)+pdpsrf(ngrid)*ptimestep)))
    10051085         endif
     1086#endif
    10061087c       -------------------------------------------------------------
    10071088c       Change of surface albedo (set to 0.4) in case of ground frost
     
    10951176        ENDDO
    10961177      ENDDO
    1097       if(min(pt(igmin,lmin),zt(igmin,lmin)).lt.70.) then       
     1178      if(min(pt(igmin,lmin),zt(igmin,lmin)).lt.70.) then
    10981179        write(*,*) 'PHYSIQ: stability WARNING :'
    10991180        write(*,*) 'pt, zt Tmin = ', pt(igmin,lmin), zt(igmin,lmin),
     
    11221203
    11231204      IF (ngrid.NE.1) THEN
    1124          print*,'Ls =',zls*180./pi
    1125      &   ,' tauref(700 Pa,lat=0) =',tauref(ngrid/2)
    1126      &   ,' tau(Viking1) =',tau(ig_vl1,1)
    1127 
    1128 
     1205
     1206#ifndef MESOSCALE
    11291207c        -------------------------------------------------------------------
    11301208c        Writing NetCDF file  "RESTARTFI" at the end of the run
     
    11451223     .              zgam,zthe)
    11461224         ENDIF
     1225#endif
    11471226
    11481227c        -------------------------------------------------------------------
     
    13001379            CALL eofdump(ngrid, nlayer, zu, zv, zt, rho, ps)
    13011380         ENDIF
     1381
     1382
     1383#ifdef MESOSCALE
     1384      !!!
     1385      !!! OUTPUT FIELDS
     1386      !!!
     1387      wtsurf(1:ngrid) = tsurf(1:ngrid)    !! surface temperature
     1388      wco2ice(1:ngrid) = co2ice(1:ngrid)  !! co2 ice
     1389      mtot(1:ngrid) = mtot(1:ngrid) * 1.e6 / rho_ice
     1390      IF (igcm_h2o_ice .ne. 0) THEN     
     1391        qsurfice(1:ngrid) = qsurf(1:ngrid,igcm_h2o_ice)
     1392        vmr=1.e6 * zq(1:ngrid,1:nlayer,igcm_h2o_ice)
     1393     .           * mugaz / mmol(igcm_h2o_ice)
     1394      ENDIF
     1395c AUTOMATICALLY GENERATED FROM REGISTRY
     1396#include "fill_save.inc"
     1397#else
    13021398
    13031399c        ==========================================================
     
    15261622c        END OF WRITEDIAGFI
    15271623c        ==========================================================
     1624#endif
    15281625
    15291626      ELSE     ! if(ngrid.eq.1)
  • trunk/MESOSCALE/LMD_MM_MARS/SIMU/runmeso

    r228 r234  
    2929#scenario="storm"
    3030
    31 if [[ "${LMDMOD}" = "" ]]
    32 then
    33     echo "Please initialize the variable LMDMOD in your environnement (or modify scripts)"
     31if [[ "${MESO}" = "" ]]
     32then
     33    echo "Please initialize the variable MESO in your environnement (or modify scripts)"
    3434    exit
    3535fi
     
    3737# A FEW DEFINITIONS YOU CAN MODIFY #
    3838####################################
    39 main_folder=$LMDMOD
     39main_folder=$MESO
    4040meso_folder=${main_folder}'/LMD_MM_MARS'
    4141calendar=${main_folder}'/LMD_MM_MARS/SIMU/calendar'
    4242simu_folder=$PWD
    43 
    4443
    4544################
  • trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/call_meso_inifis1.inc

    r226 r234  
    55
    66
    7        CALL meso_inifis(ngridmx,nlayer,nqmx,dt, &
     7       CALL inifis(ngridmx,nlayer,        &
    88               wday_ini,wdaysec,                &
    99               wappel_phys,                     &
    1010               lat_vec,lon_vec,aire_vec,1/reradius,g,r_d,cp,           &
     11               nqmx,dt,                                                &
    1112               womeg,wmugaz,                                           &
    1213               wyear_day,wperiheli,waphelie,wperi_day,wobliquit,       &
  • trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/call_meso_inifis2.inc

    r226 r234  
    88
    99       CASE(1)
    10        CALL meso_inifis(ngridmx,nlayer,nqmx,dt, &
     10       CALL inifis(ngridmx,nlayer, &
    1111               wday_ini,wdaysec,                &
    1212               wappel_phys,                     &
    1313               lat_vec,lon_vec,aire_vec,1/reradius,g,r_d,cp,           &
     14               nqmx,dt,                                                &
    1415               womeg,wmugaz,                                           &
    1516               wyear_day,wperiheli,waphelie,wperi_day,wobliquit,       &
     
    2728
    2829       CASE(2)
    29        CALL d2_meso_inifis(ngridmx,nlayer,nqmx,dt, &
     30       CALL d2_inifis(ngridmx,nlayer, &
    3031               wday_ini,wdaysec,                   &
    3132               wappel_phys,                        &
    3233               lat_vec,lon_vec,aire_vec,1/reradius,g,r_d,cp,           &
     34               nqmx,dt,                                                &
    3335               womeg,wmugaz,                                           &
    3436               wyear_day,wperiheli,waphelie,wperi_day,wobliquit,       &
  • trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/call_meso_inifis3.inc

    r226 r234  
    88
    99       CASE(1)
    10        CALL meso_inifis(ngridmx,nlayer,nqmx,dt, &
     10       CALL inifis(ngridmx,nlayer, &
    1111               wday_ini,wdaysec,                &
    1212               wappel_phys,                     &
    1313               lat_vec,lon_vec,aire_vec,1/reradius,g,r_d,cp,           &
     14               nqmx,dt,                                                &
    1415               womeg,wmugaz,                                           &
    1516               wyear_day,wperiheli,waphelie,wperi_day,wobliquit,       &
     
    2627
    2728       CASE(2)
    28        CALL d2_meso_inifis(ngridmx,nlayer,nqmx,dt, &
     29       CALL d2_inifis(ngridmx,nlayer, &
    2930               wday_ini,wdaysec,                   &
    3031               wappel_phys,                        &
    3132               lat_vec,lon_vec,aire_vec,1/reradius,g,r_d,cp,           &
     33               nqmx,dt,                                                &
    3234               womeg,wmugaz,                                           &
    3335               wyear_day,wperiheli,waphelie,wperi_day,wobliquit,       &
     
    4446
    4547       CASE(3)
    46        CALL d3_meso_inifis(ngridmx,nlayer,nqmx,dt, &
     48       CALL d3_inifis(ngridmx,nlayer, &
    4749               wday_ini,wdaysec,                   &
    4850               wappel_phys,                        &
    4951               lat_vec,lon_vec,aire_vec,1/reradius,g,r_d,cp,           &
     52               nqmx,dt,                                                &
    5053               womeg,wmugaz,                                           &
    5154               wyear_day,wperiheli,waphelie,wperi_day,wobliquit,       &
  • trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/call_meso_physiq1.inc

    r226 r234  
    55
    66
    7        CALL meso_physiq (ngrid,nlayer,nq,                              &
     7       CALL physiq (ngrid,nlayer,nq,                              &
    88               firstcall,lastcall,pday,ptime,ptimestep,                &
    99               pplev,pplay,pphi,pu, pv, pt, pq, pw,                    &
  • trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/call_meso_physiq2.inc

    r226 r234  
    88
    99       CASE(1)
    10        CALL meso_physiq (ngrid,nlayer,nq,                              &
     10       CALL physiq (ngrid,nlayer,nq,                              &
    1111               firstcall,lastcall,pday,ptime,ptimestep,                &
    1212               pplev,pplay,pphi,pu, pv, pt, pq, pw,                    &
     
    2020
    2121       CASE(2)
    22        CALL d2_meso_physiq (ngrid,nlayer,nq,                           &
     22       CALL d2_physiq (ngrid,nlayer,nq,                           &
    2323               firstcall,lastcall,pday,ptime,ptimestep,                &
    2424               pplev,pplay,pphi,pu, pv, pt, pq, pw,                    &
  • trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/call_meso_physiq3.inc

    r226 r234  
    88
    99       CASE(1)
    10        CALL meso_physiq (ngrid,nlayer,nq,                              &
     10       CALL physiq (ngrid,nlayer,nq,                              &
    1111               firstcall,lastcall,pday,ptime,ptimestep,                &
    1212               pplev,pplay,pphi,pu, pv, pt, pq, pw,                    &
     
    2020
    2121       CASE(2)
    22        CALL d2_meso_physiq (ngrid,nlayer,nq,                              &
     22       CALL d2_physiq (ngrid,nlayer,nq,                              &
    2323               firstcall,lastcall,pday,ptime,ptimestep,                &
    2424               pplev,pplay,pphi,pu, pv, pt, pq, pw,                    &
     
    3232
    3333       CASE(3)
    34        CALL meso_physiq (ngrid,nlayer,nq,                              &
     34       CALL d3_physiq (ngrid,nlayer,nq,                              &
    3535               firstcall,lastcall,pday,ptime,ptimestep,                &
    3636               pplev,pplay,pphi,pu, pv, pt, pq, pw,                    &
Note: See TracChangeset for help on using the changeset viewer.