Changeset 2907 for trunk/LMDZ.MARS/libf


Ignore:
Timestamp:
Feb 28, 2023, 2:39:58 PM (21 months ago)
Author:
romain.vande
Message:

Mars PCM:
Further implementation of subslope parametrisation.
Carefull ! This is a devolpment revision and it still need improvements and tests.
However, this commit should not change anything for nslope=1. Only nslope=1 is possible for now!

Sloped variables in the startfi are outputed along the nslope dimension.

Possibility to output variables on a specific subslope in diagfi using VAR_slopeXX in the diagfi.def,
with VAR the variable name (ex: tsurf, co2ice...) and XX the slope number (ex: 04, 07...).
Without any specific mention to slope, variable named VAR in the diagfi.def will correspond to the variable in the flat slope, this can change in the future.

Other code changes for nslope.gt.1 (sometimes the grid mesh average is used instead of the value of the subslope):

Changes for albedo :
albedo_mesh_avg is used in callradite

Changes for emis :
emis_mesh_avg is used in callradite

Changes for zdqsdif:
zdqsdif_mesh_avg is used for lifting in turbulent-resolving mode

Changes for qsurf:
qsurf_mesh_avg is used for callradite, rocketduststorm, topmons.
qsurf of the major slope is used for calchim and geticecover (tituscap)

Changes for tsurf is the next commit.

Location:
trunk/LMDZ.MARS/libf/phymars
Files:
2 edited

Legend:

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

    r2896 r2907  
    692692            ierr=NF90_REDEF(nid_restart)
    693693#ifdef NC_DOUBLE
     694            if(field_name.eq. "tauscaling" .or. field_name.eq. "totcloudfrac" .or. field_name.eq. "wstar" ) then
    694695            ierr=NF90_DEF_VAR(nid_restart,field_name,NF90_DOUBLE,&
    695696                              (/idim2,idim7/),nvarid)
    696 #else
     697            else
     698            ierr=NF90_DEF_VAR(nid_restart,field_name,NF90_DOUBLE,&
     699                              (/idim2,idim8,idim7/),nvarid)
     700            endif
     701#else
     702            if(field_name.eq. "tauscaling" .or. field_name.eq. "totcloudfrac" .or. field_name.eq. "wstar" ) then
    697703            ierr=NF90_DEF_VAR(nid_restart,field_name,NF90_FLOAT,&
    698704                              (/idim2,idim7/),nvarid)
     705            else
     706            ierr=NF90_DEF_VAR(nid_restart,field_name,NF90_DOUBLE,&
     707                              (/idim2,idim8,idim7/),nvarid)
     708            endif
    699709#endif
    700710            if (ierr.ne.NF90_NOERR) then
  • trunk/LMDZ.MARS/libf/phymars/physiq_mod.F

    r2900 r2907  
    815815      dsotop(:,:)=0.
    816816      dwatercap(:,:)=0
     817
     818      call compute_meshgridavg(ngrid,nq,albedo,emis,tsurf,qsurf,
     819     &       albedo_meshavg,emis_meshavg,tsurf_meshavg,qsurf_meshavg)
    817820     
    818821      ! Dust scenario conversion coefficient from IRabs to VISext
     
    10291032           clearsky=.false. ! part with clouds for both cases CLFvarying true/false
    10301033           CALL callradite(icount,ngrid,nlayer,nq,zday,zls,pq,
    1031      &     albedo(:,:,1),
    1032      &     emis(:,1),mu0,zplev,zplay,pt,tsurf(:,1),fract,dist_sol,igout,
     1034     &     albedo_meshavg,emis_meshavg,
     1035     &     mu0,zplev,zplay,pt,tsurf(:,1),fract,dist_sol,igout,
    10331036     &     zdtlw,zdtsw,fluxsurf_lw(:,iflat),fluxsurf_dn_sw(:,:,iflat),
    10341037     &     fluxsurf_up_sw,
     
    10371040     &     tau,aerosol,dsodust,tauscaling,dust_rad_adjust,IRtoVIScoef,
    10381041     &     taucloudtes,rdust,rice,nuice,riceco2,nuiceco2,
    1039      &     qsurf(:,igcm_co2,1),rstormdust,rtopdust,totstormfract,
     1042     &     qsurf_meshavg(:,igcm_co2),rstormdust,rtopdust,totstormfract,
    10401043     &     clearatm,dsords,dsotop,nohmons,clearsky,totcloudfrac)
    10411044
     
    10531056               clearsky=.true. 
    10541057               CALL callradite(icount,ngrid,nlayer,nq,zday,zls,pq,
    1055      &              albedo(:,:,1),emis(:,1),mu0,zplev,zplay,pt,
     1058     &              albedo_meshavg,emis_meshavg,mu0,zplev,zplay,pt,
    10561059     &              tsurf(:,1),fract,
    10571060     &              dist_sol,igout,zdtlwclf,zdtswclf,
     
    10611064     &              dsodust,tauscaling,dust_rad_adjust,IRtoVIScoef,
    10621065     &              taucloudtesclf,rdust,
    1063      &              rice,nuice,riceco2, nuiceco2,qsurf(:,igcm_co2,1),
     1066     &              rice,nuice,riceco2, nuiceco2,
     1067     &              qsurf_meshavg(:,igcm_co2),
    10641068     &              rstormdust,rtopdust,totstormfract,
    10651069     &              clearatm,dsords,dsotop,
     
    13131317c               for radiative transfer
    13141318     &                      clearatm,icount,zday,zls,
    1315      &                      tsurf,qsurf(:,igcm_co2,iflat),igout,
     1319     &                      tsurf,qsurf_meshavg(:,igcm_co2),igout,
    13161320     &                      totstormfract,tauscaling,
    13171321     &                      dust_rad_adjust,IRtoVIScoef,
     
    13771381     &                zzlay,zdtsw,zdtlw,
    13781382     &                icount,zday,zls,tsurf(:,iflat),
    1379      &                qsurf(:,igcm_co2,iflat),
     1383     &                qsurf_meshavg(:,igcm_co2),
    13801384     &                igout,aerosol,tauscaling,dust_rad_adjust,
    13811385     &                IRtoVIScoef,totstormfract,clearatm,
     
    15001504             dwatercap(ig,:)=dwatercap(ig,:)+dwatercap_dif(ig,:)
    15011505          ENDDO
    1502 c          call compute_meshgridavg(ngrid,nq,albedo,emis,tsurf,zdqsdif,
    1503 c     &   albedo_meshavg,emis_meshavg,tsurf_meshavg,zdqsdif_meshavg_tmp)
     1506          call compute_meshgridavg(ngrid,nq,albedo,emis,tsurf,zdqsdif,
     1507     &   albedo_meshavg,emis_meshavg,tsurf_meshavg,zdqsdif_meshavg_tmp)
    15041508         IF (.not.turb_resolved) THEN
    15051509          DO l=1,nlayer
     
    15391543             zdqdif(1:ngrid,1,1:nq)=0.
    15401544             zdqdif(1:ngrid,1,igcm_dust_number) =
    1541      .                  -zdqsdif(1:ngrid,igcm_dust_number,iflat)
     1545     .        -zdqsdif_meshavg_tmp(1:ngrid,igcm_dust_number)
    15421546             zdqdif(1:ngrid,1,igcm_dust_mass) =
    1543      .                  -zdqsdif(1:ngrid,igcm_dust_mass,iflat)
     1547     .        -zdqsdif_meshavg_tmp(1:ngrid,igcm_dust_mass)
    15441548             zdqdif(1:ngrid,2:nlayer,1:nq) = 0.
    15451549             DO iq=1, nq
     
    26052609          call physdem1("restartfi.nc",nsoilmx,ngrid,nlayer,nq,
    26062610     .                ptimestep,ztime_fin,
    2607      .                tsurf(:,iflat),tsoil(:,:,iflat),albedo(:,:,iflat),
    2608      .                emis(:,iflat),
    2609      .                q2,qsurf(:,:,iflat),tauscaling,totcloudfrac,wstar,
    2610      .                watercap(:,iflat))
     2611     .                tsurf,tsoil,albedo,
     2612     .                emis,q2,qsurf,tauscaling,totcloudfrac,wstar,
     2613     .                watercap)
    26112614         
    26122615         ENDIF ! of IF (write_restart)
     
    31553158         call WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2,
    31563159     &                  emis(:,iflat))
     3160         do islope=1,nslope
     3161           write(str2(1:2),'(i2.2)') islope
     3162           call WRITEDIAGFI(ngrid,"emis_slope"//str2,
     3163     &    "Surface emissivity","w.m-1",2, emis(:,islope))
     3164         ENDDO
    31573165c        call WRITEDIAGFI(ngrid,"pplay","Pressure","Pa",3,zplay)
    31583166c        call WRITEDIAGFI(ngrid,"pplev","Pressure","Pa",3,zplev)
     
    31653173         call WRITEDIAGFI(ngrid,"tsurf","Surface temperature","K",2,
    31663174     &                  tsurf(:,iflat))
     3175         do islope=1,nslope
     3176          write(str2(1:2),'(i2.2)') islope
     3177         call WRITEDIAGFI(ngrid,"tsurf_slope"//str2,
     3178     &            "Surface temperature","K",2,
     3179     &                  tsurf(:,islope))
     3180         ENDDO
    31673181         call WRITEDIAGFI(ngrid,"ps","surface pressure","Pa",2,ps)
    31683182         call WRITEDIAGFI(ngrid,"co2ice","co2 ice thickness"
    31693183     &                              ,"kg.m-2",2,qsurf(:,igcm_co2,iflat))
     3184         do islope=1,nslope
     3185          write(str2(1:2),'(i2.2)') islope
     3186         call WRITEDIAGFI(ngrid,"co2ice_slope"//str2,"co2 ice thickness"
     3187     &              ,"kg.m-2",2,qsurf(:,igcm_co2,islope))
     3188         ENDDO
    31703189         call WRITEDIAGFI(ngrid,"watercap","Water ice thickness"
    31713190     &         ,"kg.m-2",2,watercap(:,iflat))
    3172 
     3191         do islope=1,nslope
     3192          write(str2(1:2),'(i2.2)') islope
     3193         call WRITEDIAGFI(ngrid,"watercap_slope"//str2,
     3194     &         "Water ice thickness"
     3195     &         ,"kg.m-2",2,watercap(:,islope))
     3196         ENDDO
    31733197         call WRITEDIAGFI(ngrid,"temp_layer1","temperature in layer 1",
    31743198     &                  "K",2,zt(1,1))
     
    31773201         call WRITEDIAGFI(ngrid,"fluxsurf_lw","fluxsurf_lw","W.m-2",2,
    31783202     &                  fluxsurf_lw(:,iflat))
     3203         do islope=1,nslope
     3204          write(str2(1:2),'(i2.2)') islope
     3205         call WRITEDIAGFI(ngrid,"fluxsurf_lw_slope"//str2,
     3206     &              "fluxsurf_lw","W.m-2",2,
     3207     &                  fluxsurf_lw(:,islope))
     3208         ENDDO
    31793209         call WRITEDIAGFI(ngrid,"fluxsurf_dn_sw","fluxsurf_dn_sw",
    31803210     &                  "W.m-2",2,fluxsurf_dn_sw_tot(:,iflat))
     3211         do islope=1,nslope
     3212          write(str2(1:2),'(i2.2)') islope
     3213         call WRITEDIAGFI(ngrid,"fluxsurf_dn_sw_slope"//str2,
     3214     &                  "fluxsurf_dn_sw",
     3215     &                  "W.m-2",2,fluxsurf_dn_sw_tot(:,islope))
     3216         ENDDO
    31813217         call WRITEDIAGFI(ngrid,"fluxtop_lw","fluxtop_lw","W.m-2",2,
    31823218     &                  fluxtop_lw)
     
    33063342     &                     'kg.m-2',2,
    33073343     &                     qsurf(1:ngrid,igcm_h2o_ice,iflat))
     3344         do islope=1,nslope
     3345          write(str2(1:2),'(i2.2)') islope
     3346          call WRITEDIAGFI(ngrid,'qsurf02_slope'//str2,
     3347     &         'surface tracer','kg.m-2',2,
     3348     &                     qsurf(1:ngrid,igcm_h2o_ice,islope))
     3349         ENDDO
    33083350#endif
    33093351          call WRITEDIAGFI(ngrid,'mtot',
     
    34003442            call WRITEDIAGFI(ngrid,'h2o_ice_s',
    34013443     &                       'surface h2o_ice',
    3402      &                       'kg.m-2',2,qsurf(1,igcm_h2o_ice,iflat))
     3444     &            'kg.m-2',2,qsurf(1,igcm_h2o_ice,iflat))
     3445         do islope=1,nslope
     3446          write(str2(1:2),'(i2.2)') islope
     3447            call WRITEDIAGFI(ngrid,'h2o_ice_s_slope'//str2,
     3448     &                       'surface h2o_ice',
     3449     &             'kg.m-2',2,qsurf(1,igcm_h2o_ice,islope))
     3450         ENDDO
    34033451            if (hdo) then
    34043452            call WRITEDIAGFI(ngrid,'hdo_ice_s',
    34053453     &                       'surface hdo_ice',
    3406      &                       'kg.m-2',2,qsurf(1,igcm_hdo_ice,iflat))
     3454     &           'kg.m-2',2,qsurf(1,igcm_hdo_ice,iflat))
     3455         do islope=1,nslope
     3456          write(str2(1:2),'(i2.2)') islope
     3457            call WRITEDIAGFI(ngrid,'hdo_ice_s_slope'//str2,
     3458     &                       'surface hdo_ice',
     3459     &           'kg.m-2',2,qsurf(1,igcm_hdo_ice,islope))
     3460         ENDDO
    34073461
    34083462                do ig=1,ngrid
     
    34233477     &                         'albedo',
    34243478     &                         '',2,albedo(1,1,iflat))
     3479         do islope=1,nslope
     3480          write(str2(1:2),'(i2.2)') islope
     3481            CALL WRITEDIAGFI(ngrid,'albedo_slope'//str2,
     3482     &                         'albedo',
     3483     &                         '',2,albedo(1,1,islope))
     3484         ENDDO
    34253485              if (tifeedback) then
    34263486                 call WRITEDIAGSOIL(ngrid,"soiltemp",
     
    34293489                 call WRITEDIAGSOIL(ngrid,'soilti',
    34303490     &                       'Soil Thermal Inertia',
    3431      &                       'J.s-1/2.m-2.K-1',3,inertiesoil(:,:,iflat))
     3491     &         'J.s-1/2.m-2.K-1',3,inertiesoil(:,:,iflat))
     3492         do islope=1,nslope
     3493          write(str2(1:2),'(i2.2)') islope
     3494                 call WRITEDIAGSOIL(ngrid,'soilti_slope'//str2,
     3495     &                       'Soil Thermal Inertia',
     3496     &          'J.s-1/2.m-2.K-1',3,inertiesoil(:,:,islope))
     3497         ENDDO
    34323498              endif
    34333499!A. Pottier
     
    35283594               call WRITEDIAGFI(ngrid,'qsurf'//str2,'qsurf',
    35293595     &                         'kg.m-2',2,qsurf(1,iq,iflat))
     3596         do islope=1,nslope
     3597          write(str2(1:2),'(i2.2)') islope
     3598               call WRITEDIAGFI(ngrid,'qsurf_slope'//str2,'qsurf',
     3599     &                         'kg.m-2',2,qsurf(1,iq,islope))
     3600         ENDDO
    35303601             end do
    35313602           endif ! (doubleq)
     
    35553626     &                 'stormdust injection',
    35563627     &                 'kg.m-2',2,qsurf(:,igcm_stormdust_mass,iflat))
     3628         do islope=1,nslope
     3629          write(str2(1:2),'(i2.2)') islope
     3630             call WRITEDIAGFI(ngrid,'qsurf_slope'//str2,
     3631     &                 'stormdust injection',
     3632     &          'kg.m-2',2,qsurf(:,igcm_stormdust_mass,islope))
     3633         ENDDO
    35573634             call WRITEDIAGFI(ngrid,'pdqsurf',
    35583635     &                  'tendancy stormdust mass at surface',
    3559      &                  'kg.m-2',2,dqsurf(:,igcm_stormdust_mass,iflat))
     3636     &          'kg.m-2',2,dqsurf(:,igcm_stormdust_mass,iflat))
     3637         do islope=1,nslope
     3638          write(str2(1:2),'(i2.2)') islope
     3639             call WRITEDIAGFI(ngrid,'pdqsurf_slope'//str2,
     3640     &                  'tendancy stormdust mass at surface',
     3641     &            'kg.m-2',2,dqsurf(:,igcm_stormdust_mass,islope))
     3642         ENDDO
    35603643             call WRITEDIAGFI(ngrid,'wspeed','vertical speed stormdust',
    35613644     &                        'm/s',3,wspeed(:,1:nlayer))
     
    36203703             call WRITEDIAGFI(ngrid,'surfccnq','Surf nuclei mass mr',
    36213704     &                        'kg.m-2',2,qsurf(1,igcm_ccn_mass,iflat))
     3705         do islope=1,nslope
     3706          write(str2(1:2),'(i2.2)') islope
     3707             call WRITEDIAGFI(ngrid,'surfccnq_slope'//str2,
     3708     &               'Surf nuclei mass mr',
     3709     &               'kg.m-2',2,qsurf(1,igcm_ccn_mass,islope))
     3710         ENDDO
    36223711             call WRITEDIAGFI(ngrid,'surfccnN','Surf nuclei number',
    36233712     &                        'kg.m-2',2,qsurf(1,igcm_ccn_number,iflat))
     3713         do islope=1,nslope
     3714          write(str2(1:2),'(i2.2)') islope
     3715             call WRITEDIAGFI(ngrid,'surfccnN_slope'//str2,
     3716     &                 'Surf nuclei number',
     3717     &                 'kg.m-2',2,qsurf(1,igcm_ccn_number,islope))
     3718         ENDDO
    36243719           endif ! (scavenging)
    36253720
     
    37723867        call writediagsoil(ngrid,"soiltemp","Soil temperature","K",
    37733868     &                     3,tsoil(:,:,iflat))
     3869         do islope=1,nslope
     3870          write(str2(1:2),'(i2.2)') islope
     3871        call writediagsoil(ngrid,"soiltemp_slope"//str2,
     3872     &                     "Soil temperature","K",
     3873     &                     3,tsoil(:,:,islope))
     3874         ENDDO
    37743875         ! Write surface temperature
    37753876!        call writediagsoil(ngrid,"tsurf","Surface temperature","K",
     
    38023903        call writediagsoil(ngrid,"soiltemp","Soil temperature","K",
    38033904     &                     3,tsoil(:,:,iflat))
     3905         do islope=1,nslope
     3906          write(str2(1:2),'(i2.2)') islope
     3907        call writediagsoil(ngrid,"soiltemp_slope"//str2,
     3908     &                     "Soil temperature","K",
     3909     &                     3,tsoil(:,:,islope))
     3910         ENDDO
    38043911
    38053912! THERMALS STUFF 1D
     
    38263933         call WRITEDIAGFI(ngrid,"tsurf","Surface temperature","K",0,
    38273934     &                  tsurf(:,iflat))
     3935         do islope=1,nslope
     3936          write(str2(1:2),'(i2.2)') islope
     3937         call WRITEDIAGFI(ngrid,"tsurf_slope"//str2,
     3938     &             "Surface temperature","K",0,
     3939     &                  tsurf(:,islope))
     3940         ENDDO
    38283941         call WRITEDIAGFI(ngrid,"u","u wind","m/s",1,zu)
    38293942         call WRITEDIAGFI(ngrid,"v","v wind","m/s",1,zv)
     
    38403953         call WRITEDIAGFI(ngrid,"co2ice","co2 ice thickness"
    38413954     &       ,"kg.m-2",0,qsurf(:,igcm_co2,iflat))
     3955         do islope=1,nslope
     3956          write(str2(1:2),'(i2.2)') islope
     3957         call WRITEDIAGFI(ngrid,"co2ice_slope"//str2,
     3958     &                  "co2 ice thickness"
     3959     &       ,"kg.m-2",0,qsurf(:,igcm_co2,islope))
     3960         ENDDO
    38423961
    38433962         if (igcm_co2.ne.0) then
     
    38783997             call WRITEDIAGFI(ngrid,'dqsdifdustq','diffusion',
    38793998     &          'kg.m-2.s-1',0,zdqsdif(1,igcm_dust_mass,iflat))
     3999         do islope=1,nslope
     4000          write(str2(1:2),'(i2.2)') islope
     4001             call WRITEDIAGFI(ngrid,'dqsdifdustq_slope'//str2,
     4002     &             'diffusion',
     4003     &          'kg.m-2.s-1',0,zdqsdif(1,igcm_dust_mass,islope))
     4004         ENDDO
    38804005             call WRITEDIAGFI(ngrid,'dqsdifrdsq','diffusion',
    38814006     &          'kg.m-2.s-1',0,zdqsdif(1,igcm_stormdust_mass,iflat))
     4007         do islope=1,nslope
     4008          write(str2(1:2),'(i2.2)') islope
     4009             call WRITEDIAGFI(ngrid,'dqsdifrdsq_slope'//str2,
     4010     &           'diffusion',
     4011     &          'kg.m-2.s-1',0,zdqsdif(1,igcm_stormdust_mass,islope))
     4012         ENDDO
    38824013             call WRITEDIAGFI(ngrid,'mstormdtot',
    38834014     &                        'total mass of stormdust only',
     
    39034034     &                 'stormdust at surface',
    39044035     &                 'kg.m-2',0,qsurf(:,igcm_stormdust_mass,iflat))
     4036         do islope=1,nslope
     4037          write(str2(1:2),'(i2.2)') islope
     4038             call WRITEDIAGFI(ngrid,'rdsqsurf_slope'//str2,
     4039     &                 'stormdust at surface',
     4040     &                 'kg.m-2',0,qsurf(:,igcm_stormdust_mass,islope))
     4041         ENDDO
    39054042             call WRITEDIAGFI(ngrid,'qsurf',
    39064043     &                  'dust mass at surface',
    39074044     &                  'kg.m-2',0,qsurf(:,igcm_dust_mass,iflat))
     4045         do islope=1,nslope
     4046          write(str2(1:2),'(i2.2)') islope
     4047             call WRITEDIAGFI(ngrid,'qsurf_slope'//str2,
     4048     &                  'dust mass at surface',
     4049     &                  'kg.m-2',0,qsurf(:,igcm_dust_mass,islope))
     4050         ENDDO
    39084051             call WRITEDIAGFI(ngrid,'wspeed','vertical speed stormdust',
    39094052     &                        'm/s',1,wspeed)
     
    39964139     &                         'albedo',
    39974140     &                         '',2,albedo(1,1,iflat))
    3998 
     4141         do islope=1,nslope
     4142          write(str2(1:2),'(i2.2)') islope
     4143             CALL WRITEDIAGFI(ngrid,'albedo_slope'//str2,
     4144     &                         'albedo',
     4145     &                         '',2,albedo(1,1,islope))
     4146         ENDDO
    39994147             IF (hdo) THEN
    40004148             CALL WRITEDIAGFI(ngrid,'mtotD',
Note: See TracChangeset for help on using the changeset viewer.