Changeset 2252 for LMDZ5/trunk/libf


Ignore:
Timestamp:
Mar 27, 2015, 5:35:52 PM (10 years ago)
Author:
fhourdin
Message:

Poursuite du nettoyage de phyetat0, et retour à 1+1=2.
Clean and clean, there will always remain soemthing out of it.

File:
1 edited

Legend:

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

    r2251 r2252  
    202202  END DO
    203203
    204   ! Lecture des temperatures du sol:
    205 
    206   CALL get_field("TS", ftsol(:, 1), found)
    207   IF (.NOT. found) THEN
    208      PRINT*, 'phyetat0: Le champ <TS> est absent'
    209      PRINT*, '          Mais je vais essayer de lire TS**'
    210      DO nsrf = 1, nbsrf
    211         IF (nsrf.GT.99) THEN
    212            PRINT*, "Trop de sous-mailles"
     204!===================================================================
     205! Lecture des temperatures du sol:
     206!===================================================================
     207
     208  found=phyetat0_get(1,ftsol(:,1),"TS","Surface temperature",283.)
     209  IF (found) THEN
     210     DO nsrf=2,nbsrf
     211        ftsol(:,nsrf)=ftsol(:,1)
     212     ENDDO
     213  ELSE
     214     found=phyetat0_srf(1,ftsol,"TS","Surface temperature",283.)
     215  ENDIF
     216
     217!===================================================================
     218  ! Lecture des albedo difus et direct
     219!===================================================================
     220
     221  DO nsrf = 1, nbsrf
     222     DO isw=1, nsw
     223        IF (isw.GT.99) THEN
     224           PRINT*, "Trop de bandes SW"
    213225           call abort_gcm("phyetat0", "", 1)
    214226        ENDIF
    215         WRITE(str2, '(i2.2)') nsrf
    216         CALL get_field("TS"//str2, ftsol(:, nsrf))
    217 
    218         xmin = 1.0E+20
    219         xmax = -1.0E+20
    220         DO i = 1, klon
    221            xmin = MIN(ftsol(i, nsrf), xmin)
    222            xmax = MAX(ftsol(i, nsrf), xmax)
    223         ENDDO
    224         PRINT*, 'Temperature du sol TS**:', nsrf, xmin, xmax
     227        WRITE(str2, '(i2.2)') isw
     228        found=phyetat0_srf(1,falb_dir(:, isw,:),"A_dir_SW"//str2//"srf","Direct Albedo",0.2)
     229        found=phyetat0_srf(1,falb_dif(:, isw,:),"A_dif_SW"//str2//"srf","Direct Albedo",0.2)
    225230     ENDDO
    226   ELSE
    227      PRINT*, 'phyetat0: Le champ <TS> est present'
    228      PRINT*, '          J ignore donc les autres temperatures TS**'
    229      xmin = 1.0E+20
    230      xmax = -1.0E+20
    231      DO i = 1, klon
    232         xmin = MIN(ftsol(i, 1), xmin)
    233         xmax = MAX(ftsol(i, 1), xmax)
    234      ENDDO
    235      PRINT*, 'Temperature du sol <TS>', xmin, xmax
    236      DO nsrf = 2, nbsrf
    237         DO i = 1, klon
    238            ftsol(i, nsrf) = ftsol(i, 1)
    239         ENDDO
    240      ENDDO
    241   ENDIF
    242 
    243 !===================================================================
    244   ! Lecture des albedo difus et direct
    245 
    246   DO nsrf = 1, nbsrf
    247      DO isw=1, nsw
    248         IF (isw.GT.99 .AND. nsrf.GT.99) THEN
    249            PRINT*, "Trop de bandes SW ou sous-mailles"
     231  ENDDO
     232
     233!===================================================================
     234  ! Lecture des temperatures du sol profond:
     235!===================================================================
     236
     237   DO isoil=1, nsoilmx
     238        IF (isoil.GT.99) THEN
     239           PRINT*, "Trop de couches "
    250240           call abort_gcm("phyetat0", "", 1)
    251241        ENDIF
    252         WRITE(str7, '(i2.2, "srf", i2.2)') isw, nsrf
    253 
    254         CALL get_field('A_dir_SW'//str7, falb_dir(:, isw, nsrf), found)
    255         IF (.NOT. found) THEN
    256            PRINT*, "phyetat0: Le champ <A_dir_SW"//str7//"> est absent"
    257            PRINT*, "          Il prend donc la valeur de surface"
    258            DO i=1, klon
    259               falb_dir(i, isw, nsrf)=0.2
    260            ENDDO
    261         ENDIF
    262         CALL get_field('A_dif_SW'//str7, falb_dif(:, isw, nsrf), found)
    263         IF (.NOT. found) THEN
    264            PRINT*, "phyetat0: Le champ <A_dif_SW"//str7//"> est absent"
    265            PRINT*, "          Il prend donc la valeur de surface"
    266            DO i=1, klon
    267               falb_dif(i, isw, nsrf)=0.2
    268            ENDDO
    269         ENDIF
    270      ENDDO
    271   ENDDO
    272 
    273 !===================================================================
    274   ! Lecture des temperatures du sol profond:
    275 
    276   DO nsrf = 1, nbsrf
    277      DO isoil=1, nsoilmx
    278         IF (isoil.GT.99 .AND. nsrf.GT.99) THEN
    279            PRINT*, "Trop de couches ou sous-mailles"
    280            call abort_gcm("phyetat0", "", 1)
    281         ENDIF
    282         WRITE(str7, '(i2.2, "srf", i2.2)') isoil, nsrf
    283 
    284         CALL get_field('Tsoil'//str7, tsoil(:, isoil, nsrf), found)
     242        WRITE(str2,'(i2.2)') isoil
     243        found=phyetat0_srf(1,tsoil(:, isoil,:),"Tsoil"//str2//"srf","Temp soil",0.)
    285244        IF (.NOT. found) THEN
    286245           PRINT*, "phyetat0: Le champ <Tsoil"//str7//"> est absent"
    287246           PRINT*, "          Il prend donc la valeur de surface"
    288            DO i=1, klon
    289               tsoil(i, isoil, nsrf)=ftsol(i, nsrf)
    290            ENDDO
     247           tsoil(:, isoil, :)=ftsol(:, :)
    291248        ENDIF
    292      ENDDO
    293   ENDDO
    294 
    295 !===================================================================
    296   ! Lecture de l'humidite de l'air juste au dessus du sol:
    297 
    298   CALL get_field("QS", qsurf(:, 1), found)
     249   ENDDO
     250
     251!=======================================================================
     252! Lecture precipitation/evaporation
     253!=======================================================================
     254
     255  found=phyetat0_srf(1,qsurf,"QS","Near surface hmidity",0.)
     256  found=phyetat0_get(1,qsol,"QSOL","Surface hmidity / bucket",0.)
     257  found=phyetat0_srf(1,snow,"SNOW","Surface snow",0.)
     258  found=phyetat0_srf(1,fevap,"EVAP","evaporation",0.)
     259  found=phyetat0_get(1,snow_fall,"snow_f","snow fall",0.)
     260  found=phyetat0_get(1,rain_fall,"rain_f","rain fall",0.)
     261
     262!=======================================================================
     263! Radiation
     264!=======================================================================
     265
     266  found=phyetat0_get(1,solsw,"solsw","net SW radiation surf",0.)
     267  found=phyetat0_get(1,sollw,"sollw","net LW radiation surf",0.)
     268  found=phyetat0_get(1,sollwdown,"sollwdown","down LW radiation surf",0.)
    299269  IF (.NOT. found) THEN
    300      PRINT*, 'phyetat0: Le champ <QS> est absent'
    301      PRINT*, '          Mais je vais essayer de lire QS**'
    302      DO nsrf = 1, nbsrf
    303         IF (nsrf.GT.99) THEN
    304            PRINT*, "Trop de sous-mailles"
    305            call abort_gcm("phyetat0", "", 1)
    306         ENDIF
    307         WRITE(str2, '(i2.2)') nsrf
    308         CALL get_field("QS"//str2, qsurf(:, nsrf))
    309         xmin = 1.0E+20
    310         xmax = -1.0E+20
    311         DO i = 1, klon
    312            xmin = MIN(qsurf(i, nsrf), xmin)
    313            xmax = MAX(qsurf(i, nsrf), xmax)
    314         ENDDO
    315         PRINT*, 'Humidite pres du sol QS**:', nsrf, xmin, xmax
    316      ENDDO
    317   ELSE
    318      PRINT*, 'phyetat0: Le champ <QS> est present'
    319      PRINT*, '          J ignore donc les autres humidites QS**'
    320      xmin = 1.0E+20
    321      xmax = -1.0E+20
    322      DO i = 1, klon
    323         xmin = MIN(qsurf(i, 1), xmin)
    324         xmax = MAX(qsurf(i, 1), xmax)
    325      ENDDO
    326      PRINT*, 'Humidite pres du sol <QS>', xmin, xmax
    327      DO nsrf = 2, nbsrf
    328         DO i = 1, klon
    329            qsurf(i, nsrf) = qsurf(i, 1)
    330         ENDDO
    331      ENDDO
    332   ENDIF
    333 
    334   ! Eau dans le sol (pour le modele de sol "bucket")
    335 
    336   CALL get_field("QSOL", qsol, found)
    337   IF (.NOT. found) THEN
    338      PRINT*, 'phyetat0: Le champ <QSOL> est absent'
    339      PRINT*, '          Valeur par defaut nulle'
    340      qsol(:)=0.
    341   ENDIF
    342 
    343   xmin = 1.0E+20
    344   xmax = -1.0E+20
    345   DO i = 1, klon
    346      xmin = MIN(qsol(i), xmin)
    347      xmax = MAX(qsol(i), xmax)
    348   ENDDO
    349   PRINT*, 'Eau dans le sol (mm) <QSOL>', xmin, xmax
    350 
    351   ! Lecture de neige au sol:
    352 
    353   CALL get_field("SNOW", snow(:, 1), found)
    354   IF (.NOT. found) THEN
    355      PRINT*, 'phyetat0: Le champ <SNOW> est absent'
    356      PRINT*, '          Mais je vais essayer de lire SNOW**'
    357      DO nsrf = 1, nbsrf
    358         IF (nsrf.GT.99) THEN
    359            PRINT*, "Trop de sous-mailles"
    360            call abort_gcm("phyetat0", "", 1)
    361         ENDIF
    362         WRITE(str2, '(i2.2)') nsrf
    363         CALL get_field( "SNOW"//str2, snow(:, nsrf))
    364         xmin = 1.0E+20
    365         xmax = -1.0E+20
    366         DO i = 1, klon
    367            xmin = MIN(snow(i, nsrf), xmin)
    368            xmax = MAX(snow(i, nsrf), xmax)
    369         ENDDO
    370         PRINT*, 'Neige du sol SNOW**:', nsrf, xmin, xmax
    371      ENDDO
    372   ELSE
    373      PRINT*, 'phyetat0: Le champ <SNOW> est present'
    374      PRINT*, '          J ignore donc les autres neiges SNOW**'
    375      xmin = 1.0E+20
    376      xmax = -1.0E+20
    377      DO i = 1, klon
    378         xmin = MIN(snow(i, 1), xmin)
    379         xmax = MAX(snow(i, 1), xmax)
    380      ENDDO
    381      PRINT*, 'Neige du sol <SNOW>', xmin, xmax
    382      DO nsrf = 2, nbsrf
    383         DO i = 1, klon
    384            snow(i, nsrf) = snow(i, 1)
    385         ENDDO
    386      ENDDO
    387   ENDIF
    388 
    389   ! Lecture de evaporation: 
    390 
    391   CALL get_field("EVAP", fevap(:, 1), found)
    392   IF (.NOT. found) THEN
    393      PRINT*, 'phyetat0: Le champ <EVAP> est absent'
    394      PRINT*, '          Mais je vais essayer de lire EVAP**'
    395      DO nsrf = 1, nbsrf
    396         IF (nsrf.GT.99) THEN
    397            PRINT*, "Trop de sous-mailles"
    398            call abort_gcm("phyetat0", "", 1)
    399         ENDIF
    400         WRITE(str2, '(i2.2)') nsrf
    401         CALL get_field("EVAP"//str2, fevap(:, nsrf))
    402         xmin = 1.0E+20
    403         xmax = -1.0E+20
    404         DO i = 1, klon
    405            xmin = MIN(fevap(i, nsrf), xmin)
    406            xmax = MAX(fevap(i, nsrf), xmax)
    407         ENDDO
    408         PRINT*, 'fevap du sol EVAP**:', nsrf, xmin, xmax
    409      ENDDO
    410   ELSE
    411      PRINT*, 'phyetat0: Le champ <EVAP> est present'
    412      PRINT*, '          J ignore donc les autres EVAP**'
    413      xmin = 1.0E+20
    414      xmax = -1.0E+20
    415      DO i = 1, klon
    416         xmin = MIN(fevap(i, 1), xmin)
    417         xmax = MAX(fevap(i, 1), xmax)
    418      ENDDO
    419      PRINT*, 'Evap du sol <EVAP>', xmin, xmax
    420      DO nsrf = 2, nbsrf
    421         DO i = 1, klon
    422            fevap(i, nsrf) = fevap(i, 1)
    423         ENDDO
    424      ENDDO
    425   ENDIF
    426 
    427   ! Lecture precipitation liquide:
    428 
    429   CALL get_field("rain_f", rain_fall)
    430   xmin = 1.0E+20
    431   xmax = -1.0E+20
    432   DO i = 1, klon
    433      xmin = MIN(rain_fall(i), xmin)
    434      xmax = MAX(rain_fall(i), xmax)
    435   ENDDO
    436   PRINT*, 'Precipitation liquide rain_f:', xmin, xmax
    437 
    438   ! Lecture precipitation solide:
    439 
    440   CALL get_field("snow_f", snow_fall)
    441   xmin = 1.0E+20
    442   xmax = -1.0E+20
    443   DO i = 1, klon
    444      xmin = MIN(snow_fall(i), xmin)
    445      xmax = MAX(snow_fall(i), xmax)
    446   ENDDO
    447   PRINT*, 'Precipitation solide snow_f:', xmin, xmax
    448 
    449   ! Lecture rayonnement solaire au sol:
    450 
    451   CALL get_field("solsw", solsw, found)
    452   IF (.NOT. found) THEN
    453      PRINT*, 'phyetat0: Le champ <solsw> est absent'
    454      PRINT*, 'mis a zero'
    455      solsw(:) = 0.
    456   ENDIF
    457   xmin = 1.0E+20
    458   xmax = -1.0E+20
    459   DO i = 1, klon
    460      xmin = MIN(solsw(i), xmin)
    461      xmax = MAX(solsw(i), xmax)
    462   ENDDO
    463   PRINT*, 'Rayonnement solaire au sol solsw:', xmin, xmax
    464 
    465   ! Lecture rayonnement IF au sol:
    466 
    467   CALL get_field("sollw", sollw, found)
    468   IF (.NOT. found) THEN
    469      PRINT*, 'phyetat0: Le champ <sollw> est absent'
    470      PRINT*, 'mis a zero'
    471      sollw = 0.
    472   ENDIF
    473   xmin = 1.0E+20
    474   xmax = -1.0E+20
    475   DO i = 1, klon
    476      xmin = MIN(sollw(i), xmin)
    477      xmax = MAX(sollw(i), xmax)
    478   ENDDO
    479   PRINT*, 'Rayonnement IF au sol sollw:', xmin, xmax
    480 
    481   CALL get_field("sollwdown", sollwdown, found)
    482   IF (.NOT. found) THEN
    483      PRINT*, 'phyetat0: Le champ <sollwdown> est absent'
    484      PRINT*, 'mis a zero'
    485      sollwdown = 0.
    486      zts=0.
     270     sollwdown = 0. ;  zts=0.
    487271     do nsrf=1,nbsrf
    488272        zts(:)=zts(:)+ftsol(:,nsrf)*pctsrf(:,nsrf)
     
    490274     sollwdown(:)=sollw(:)+RSIGMA*zts(:)**4
    491275  ENDIF
    492 !  print*,'TS SOLL',zts(klon/2),sollw(klon/2),sollwdown(klon/2)
    493   xmin = 1.0E+20
    494   xmax = -1.0E+20
    495   DO i = 1, klon
    496      xmin = MIN(sollwdown(i), xmin)
    497      xmax = MAX(sollwdown(i), xmax)
    498   ENDDO
    499   PRINT*, 'Rayonnement IF au sol sollwdown:', xmin, xmax
    500 
    501 
    502   ! Lecture derive des flux:
    503 
    504   CALL get_field("fder", fder, found)
    505   IF (.NOT. found) THEN
    506      PRINT*, 'phyetat0: Le champ <fder> est absent'
    507      PRINT*, 'mis a zero'
    508      fder = 0.
    509   ENDIF
    510   xmin = 1.0E+20
    511   xmax = -1.0E+20
    512   DO i = 1, klon
    513      xmin = MIN(fder(i), xmin)
    514      xmax = MAX(fder(i), xmax)
    515   ENDDO
    516   PRINT*, 'Derive des flux fder:', xmin, xmax
    517 
    518   ! Lecture du rayonnement net au sol:
    519 
    520   CALL get_field("RADS", radsol)
    521   xmin = 1.0E+20
    522   xmax = -1.0E+20
    523   DO i = 1, klon
    524      xmin = MIN(radsol(i), xmin)
    525      xmax = MAX(radsol(i), xmax)
    526   ENDDO
    527   PRINT*, 'Rayonnement net au sol radsol:', xmin, xmax
     276
     277  found=phyetat0_get(1,radsol,"RADS","Solar radiation",0.)
     278  found=phyetat0_get(1,fder,"fder","Flux derivative",0.)
     279
    528280
    529281  ! Lecture de la longueur de rugosite
    530 
    531 IF (1==0) THEN ! A DERTRUIRE TOUT DE SUITE
    532      DO nsrf = 1, nbsrf
    533         IF (nsrf.GT.99) THEN
    534            PRINT*, "Trop de sous-mailles"
    535            call abort_gcm("phyetat0", "", 1)
    536         ENDIF
    537         WRITE(str2, '(i2.2)') nsrf
    538 ! Retrocompatibilite. A nettoyer fin 2015
    539         CALL get_field("RUG"//str2, z0m(:, nsrf),found)
    540         IF (found) THEN
    541             z0h(:,nsrf)=z0m(:,nsrf)
    542             PRINT*,'Lecture de ',"RUG"//str2,' -> z0m/z0h (obsolete)'
    543         ELSE
    544             CALL get_field("Z0m"//str2, z0m(:, nsrf), found)
    545             IF (.NOT.found) Z0m=1.e-3 ! initialisation à 1mm au cas ou.
    546             CALL get_field("Z0h"//str2, z0h(:, nsrf), found)
    547             IF (.NOT.found) Z0h=1.e-3 ! initialisation à 1mm au cas ou.
    548         ENDIF
    549         PRINT*, 'rugosite Z0m',nsrf,minval(z0m(:, nsrf)),maxval(z0m(:, nsrf))
    550         PRINT*, 'rugosite Z0h',nsrf,minval(z0h(:, nsrf)),maxval(z0h(:, nsrf))
    551 
    552      ENDDO
    553 ELSE
    554282  found=phyetat0_srf(1,z0m,"RUG","Z0m ancien",0.001)
    555283  IF (found) THEN
     
    559287     found=phyetat0_srf(1,z0h,"Z0h","Roughness length, enthalpy ",0.001)
    560288  ENDIF
    561 ENDIF
    562289
    563290  ! Lecture de l'age de la neige:
    564 
    565   CALL get_field("AGESNO", agesno(:, 1), found)
    566   IF (.NOT. found) THEN
    567      PRINT*, 'phyetat0: Le champ <AGESNO> est absent'
    568      PRINT*, '          Mais je vais essayer de lire AGESNO**'
    569      DO nsrf = 1, nbsrf
    570         IF (nsrf.GT.99) THEN
    571            PRINT*, "Trop de sous-mailles"
    572            call abort_gcm("phyetat0", "", 1)
    573         ENDIF
    574         WRITE(str2, '(i2.2)') nsrf
    575         CALL get_field("AGESNO"//str2, agesno(:, nsrf), found)
    576         IF (.NOT. found) THEN
    577            PRINT*, "phyetat0: Le champ <AGESNO"//str2//"> est absent"
    578            agesno = 50.0
    579         ENDIF
    580         PRINT*, 'agesno',nsrf,minval(agesno(:, nsrf)),maxval(agesno(:, nsrf))
    581      ENDDO
    582   ELSE
    583      PRINT*, 'phyetat0: Le champ <AGESNO> est present'
    584      PRINT*, '          J ignore donc les autres AGESNO**'
    585      xmin = 1.0E+20
    586      xmax = -1.0E+20
    587      DO i = 1, klon
    588         xmin = MIN(agesno(i, 1), xmin)
    589         xmax = MAX(agesno(i, 1), xmax)
    590      ENDDO
    591      PRINT*, 'Age de la neige <AGESNO>', xmin, xmax
    592      DO nsrf = 2, nbsrf
    593         DO i = 1, klon
    594            agesno(i, nsrf) = agesno(i, 1)
    595         ENDDO
    596      ENDDO
     291  found=phyetat0_srf(1,agesno,"AGESNO","SNOW AGE",0.001)
     292
     293  ancien_ok=.true.
     294  ancien_ok=ancien_ok.AND.phyetat0_get(klev,t_ancien,"TANCIEN","TANCIEN",0.)
     295  ancien_ok=ancien_ok.AND.phyetat0_get(klev,q_ancien,"QANCIEN","QANCIEN",0.)
     296  ancien_ok=ancien_ok.AND.phyetat0_get(klev,u_ancien,"UANCIEN","UANCIEN",0.)
     297  ancien_ok=ancien_ok.AND.phyetat0_get(klev,v_ancien,"VANCIEN","VANCIEN",0.)
     298
     299  found=phyetat0_get(klev,clwcon,"CLWCON","CLWCON",0.)
     300  found=phyetat0_get(klev,rnebcon,"RNEBCON","RNEBCON",0.)
     301  found=phyetat0_get(klev,ratqs,"RATQS","RATQS",0.)
     302
     303  found=phyetat0_get(1,run_off_lic_0,"RUNOFFLIC0","RUNOFFLIC0",0.)
     304
     305!==================================
     306!  TKE
     307!==================================
     308!
     309  IF (iflag_pbl>1) then
     310     found=phyetat0_srf(klev+1,pbl_tke,"TKE","Turb. Kinetic. Energ. ",1.e-8)
    597311  ENDIF
    598312
    599 !  CALL get_field("ZMEA", zmea)
    600 !  PRINT*, 'OROGRAPHIE SOUS-MAILLE zmea:',minval(zmea(:)),maxval(zmea(:))
    601   found=phyetat0_get(1,zmea,"ZMEA","mean orography",0.)
    602 
    603   CALL get_field("ZSTD", zstd)
    604   PRINT*, 'OROGRAPHIE SOUS-MAILLE zstd:',minval(zstd(:)),maxval(zstd(:))
    605 
    606   CALL get_field("ZSIG", zsig)
    607   PRINT*, 'OROGRAPHIE SOUS-MAILLE zsig:',minval(zsig(:)),maxval(zsig(:))
    608 
    609   CALL get_field("ZGAM", zgam)
    610   PRINT*, 'OROGRAPHIE SOUS-MAILLE zgam:',minval(zgam(:)),maxval(zgam(:))
    611 
    612   CALL get_field("ZTHE", zthe)
    613   PRINT*, 'OROGRAPHIE SOUS-MAILLE zthe:',minval(zthe(:)),maxval(zthe(:))
    614 
    615   CALL get_field("ZPIC", zpic)
    616   PRINT*, 'OROGRAPHIE SOUS-MAILLE zpic:',minval(zpic(:)),maxval(zpic(:))
    617 
    618   CALL get_field("ZVAL", zval)
    619   PRINT*, 'OROGRAPHIE SOUS-MAILLE zval:',minval(zval(:)),maxval(zval(:))
    620 
    621   CALL get_field("RUGSREL", rugoro)
    622   PRINT*, 'Rugosite relief (ecart-type) rugsrel:',minval(rugoro(:)),maxval(rugoro(:))
    623 
    624   ancien_ok = .TRUE.
    625 
    626   CALL get_field("TANCIEN", t_ancien, found)
    627   IF (.NOT. found) THEN
    628      PRINT*, "phyetat0: Le champ <TANCIEN> est absent"
    629      PRINT*, "Depart legerement fausse. Mais je continue"
    630      ancien_ok = .FALSE.
    631   ENDIF
    632 
    633   CALL get_field("QANCIEN", q_ancien, found)
    634   IF (.NOT. found) THEN
    635      PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
    636      PRINT*, "Depart legerement fausse. Mais je continue"
    637      ancien_ok = .FALSE.
    638   ENDIF
    639 
    640   CALL get_field("UANCIEN", u_ancien, found)
    641   IF (.NOT. found) THEN
    642      PRINT*, "phyetat0: Le champ <UANCIEN> est absent"
    643      PRINT*, "Depart legerement fausse. Mais je continue"
    644      ancien_ok = .FALSE.
    645   ENDIF
    646 
    647   CALL get_field("VANCIEN", v_ancien, found)
    648   IF (.NOT. found) THEN
    649      PRINT*, "phyetat0: Le champ <VANCIEN> est absent"
    650      PRINT*, "Depart legerement fausse. Mais je continue"
    651      ancien_ok = .FALSE.
    652   ENDIF
    653 
    654   clwcon=0.
    655   CALL get_field("CLWCON", clwcon, found)
    656   IF (.NOT. found) THEN
    657      PRINT*, "phyetat0: Le champ CLWCON est absent"
    658      PRINT*, "Depart legerement fausse. Mais je continue"
    659   ENDIF
    660   PRINT*,'Eau liquide convective (ecart-type) clwcon:',MINval(clwcon),MAXval(clwcon)
    661 
    662 
    663   rnebcon = 0.
    664   CALL get_field("RNEBCON", rnebcon, found)
    665   IF (.NOT. found) THEN
    666      PRINT*, "phyetat0: Le champ RNEBCON est absent"
    667      PRINT*, "Depart legerement fausse. Mais je continue"
    668   ENDIF
    669   PRINT*, 'Nebulosite convective (ecart-type) rnebcon:',MINval(rnebcon),MAXval(rnebcon)
    670 
    671   ! Lecture ratqs
    672 
    673   ratqs=0.
    674   CALL get_field("RATQS", ratqs, found)
    675   IF (.NOT. found) THEN
    676      PRINT*, "phyetat0: Le champ <RATQS> est absent"
    677      PRINT*, "Depart legerement fausse. Mais je continue"
    678   ENDIF
    679   PRINT*, '(ecart-type) ratqs:', MINval(ratqs),MAXval(ratqs)
    680 
    681   ! Lecture run_off_lic_0
    682 
    683   CALL get_field("RUNOFFLIC0", run_off_lic_0, found)
    684   IF (.NOT. found) THEN
    685      PRINT*, "phyetat0: Le champ <RUNOFFLIC0> est absent"
    686      PRINT*, "Depart legerement fausse. Mais je continue"
    687      run_off_lic_0 = 0.
    688   ENDIF
    689   PRINT*, '(ecart-type) run_off_lic_0:', MINval(run_off_lic_0),MAXval(run_off_lic_0)
    690 
    691   ! Lecture de l'energie cinetique turbulente
    692 
    693   IF (iflag_pbl>1) then
    694      DO nsrf = 1, nbsrf
    695         IF (nsrf.GT.99) THEN
    696            PRINT*, "Trop de sous-mailles"
    697            call abort_gcm("phyetat0", "", 1)
    698         ENDIF
    699         WRITE(str2, '(i2.2)') nsrf
    700         CALL get_field("TKE"//str2, pbl_tke(:, 1:klev+1, nsrf), found)
    701         IF (.NOT. found) THEN
    702            PRINT*, "phyetat0: <TKE"//str2//"> est absent"
    703            pbl_tke(:, :, nsrf)=1.e-8
    704         ENDIF
    705         PRINT*, 'Turbulent kinetic energyl TKE**:', nsrf, minval(pbl_tke(:,:,nsrf)),maxval(pbl_tke(:,:, nsrf))
    706 
    707      ENDDO
    708   ENDIF
    709 
    710 ! Lecture de l'ecart de TKE (w) - (x)
    711 !
    712   IF (iflag_pbl>1 .AND. iflag_wake>=1  &
    713            .AND. iflag_pbl_split >=1 ) then
    714     DO nsrf = 1, nbsrf
    715       IF (nsrf.GT.99) THEN
    716         PRINT*, "Trop de sous-mailles"
    717         call abort_gcm("phyetat0", "", 1)
    718       ENDIF
    719       WRITE(str2,'(i2.2)') nsrf
    720       CALL get_field("DELTATKE"//str2, &
    721                     wake_delta_pbl_tke(:,1:klev+1,nsrf),found)
    722       IF (.NOT. found) THEN
    723         PRINT*, "phyetat0: <DELTATKE"//str2//"> est absent"
    724         wake_delta_pbl_tke(:,:,nsrf)=0.
    725       ENDIF
    726       PRINT*,'TKE difference (w)-(x) DELTATKE**:', nsrf,       &
    727       minval(wake_delta_pbl_tke(:,:,nsrf)),maxval(wake_delta_pbl_tke(:,:, nsrf))
    728 
    729     ENDDO
    730 
    731   ! delta_tsurf
    732 
    733     DO nsrf = 1, nbsrf
    734        IF (nsrf.GT.99) THEN
    735          PRINT*, "Trop de sous-mailles"
    736          call abort_gcm("phyetat0", "", 1)
    737        ENDIF
    738        WRITE(str2,'(i2.2)') nsrf
    739      CALL get_field("DELTA_TSURF"//str2, delta_tsurf(:,nsrf), found)
    740      IF (.NOT. found) THEN
    741         PRINT*, "phyetat0: Le champ <DELTA_TSURF"//str2//"> est absent"
    742         PRINT*, "Depart legerement fausse. Mais je continue"
    743         delta_tsurf(:,nsrf)=0.
    744      ELSE
    745         PRINT*, 'delta_tsurf:', nsrf,       &
    746       minval(delta_tsurf(:,nsrf)),maxval(delta_tsurf(:, nsrf))
    747      ENDIF
    748     ENDDO  ! nsrf = 1, nbsrf
     313  IF (iflag_pbl>1 .AND. iflag_wake>=1  .AND. iflag_pbl_split >=1 ) then
     314    found=phyetat0_srf(klev+1,wake_delta_pbl_tke,"DELTATKE","Del TKE wk/env",0.)
     315    found=phyetat0_srf(1,delta_tsurf,"DELTA_TSURF","Delta Ts wk/env ",0.)
    749316  ENDIF   !(iflag_pbl>1 .AND. iflag_wake>=1 .AND. iflag_pbl_split >=1 )
    750317
     
    753320!==================================
    754321
    755   found=phyetat0_get(1,w01,"w01","w01",0.)
    756   found=phyetat0_get(1,sig1,"sig1","sig1",0.)
    757 
     322! Emanuel
     323  found=phyetat0_get(klev,sig1,"sig1","sig1",0.)
     324  found=phyetat0_get(klev,w01,"w01","w01",0.)
     325
     326! Wake
    758327  found=phyetat0_get(klev,wake_deltat,"WAKE_DELTAT","Delta T wake/env",0.)
    759328  found=phyetat0_get(klev,wake_deltaq,"WAKE_DELTAQ","Delta hum. wake/env",0.)
    760   found=phyetat0_get(1,wake_s,"WAKE_S","???",0.)
    761   found=phyetat0_get(1,wake_cstar,"WAKE_CSTAR","???",0.)
    762   found=phyetat0_get(1,wake_pe,"WAKE_PE","???",0.)
    763   found=phyetat0_get(1,wake_fip,"WAKE_FIP","???",0.)
    764 
    765 
     329  found=phyetat0_get(1,wake_s,"WAKE_S","WAKE_S",0.)
     330  found=phyetat0_get(1,wake_cstar,"WAKE_CSTAR","WAKE_CSTAR",0.)
     331  found=phyetat0_get(1,wake_pe,"WAKE_PE","WAKE_PE",0.)
     332  found=phyetat0_get(1,wake_fip,"WAKE_FIP","WAKE_FIP",0.)
     333
     334! Thermiques
    766335  found=phyetat0_get(1,zmax0,"ZMAX0","ZMAX0",40.)
    767336  found=phyetat0_get(1,f0,"F0","F0",1.e-5)
    768   found=phyetat0_get(klev,fm_therm,"FM_THERM","Thermals mass flux",0.)
     337  found=phyetat0_get(klev+1,fm_therm,"FM_THERM","Thermals mass flux",0.)
    769338  found=phyetat0_get(klev,entr_therm,"ENTR_THERM","Thermals Entrain.",0.)
    770339  found=phyetat0_get(klev,detr_therm,"DETR_THERM","Thermals Detrain.",0.)
    771340
    772 
     341! ALE/ALP
    773342  found=phyetat0_get(1,ale_bl,"ALE_BL","ALE BL",0.)
    774343  found=phyetat0_get(1,ale_bl_trig,"ALE_BL_TRIG","ALE BL_TRIG",0.)
    775344  found=phyetat0_get(1,alp_bl,"ALP_BL","ALP BL",0.)
    776345
    777 
    778346!===========================================
    779347  ! Read and send field trs to traclmdz
     
    783351     DO it=1, nbtr
    784352        iiq=niadv(it+2)
    785         found=phyetat0_get(1,trs(:,it),"trs_"//tname(iiq),"Surf trac"//tname(iiq),0.)
     353        found=phyetat0_get(1,trs(:,it),"trs_"//tname(iiq), &
     354              "Surf trac"//tname(iiq),0.)
    786355     END DO
    787356     CALL traclmdz_from_restart(trs)
    788357
    789358     IF (carbon_cycle_cpl) THEN
     359        ALLOCATE(co2_send(klon), stat=ierr)
     360        IF (ierr /= 0) CALL abort_gcm('phyetat0', 'pb allocation co2_send', 1)
    790361        found=phyetat0_get(1,co2_send,"co2_send","co2 send",0.)
    791362     END IF
     
    793364
    794365!===========================================
     366!  ondes de gravite / relief
     367!===========================================
     368
    795369!  ondes de gravite non orographiques
    796 !===========================================
    797 
    798370  if (ok_gwd_rando) then
    799      call get_field("du_gwd_rando", du_gwd_rando, found)
    800371     found=phyetat0_get(klev,du_gwd_rando,"du_gwd_rando","du_gwd_rando",0.)
    801372     found=phyetat0_get(klev,dv_gwd_rando,"dv_gwd_rando","dv_gwd_rando",0.)
    802373  end if
     374
     375!  prise en compte du relief sous-maille
     376  found=phyetat0_get(1,zmea,"ZMEA","sub grid orography",0.)
     377  found=phyetat0_get(1,zstd,"ZSTD","sub grid orography",0.)
     378  found=phyetat0_get(1,zsig,"ZSIG","sub grid orography",0.)
     379  found=phyetat0_get(1,zgam,"ZGAM","sub grid orography",0.)
     380  found=phyetat0_get(1,zthe,"ZTHE","sub grid orography",0.)
     381  found=phyetat0_get(1,zpic,"ZPIC","sub grid orography",0.)
     382  found=phyetat0_get(1,zval,"ZVAL","sub grid orography",0.)
     383  found=phyetat0_get(1,zmea,"ZMEA","sub grid orography",0.)
     384  found=phyetat0_get(1,rugoro,"RUGSREL","sub grid orography",0.)
    803385
    804386!===========================================
Note: See TracChangeset for help on using the changeset viewer.