Ignore:
Timestamp:
May 9, 2008, 6:17:59 PM (17 years ago)
Author:
lmdzadmin
Message:

Nettoyage du controle des parametres physiques. FH

Les parametres cycle_diurne, soil_model, new_oliq, ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad et iflag_con
sont maintenant geres par la physique uniquement.
ecritphy est elimine.
dimphy.F90 et clesphys.h ne sont plus utilises par le code dynamique.
Le test academique obtenu en compilant avec
makegcm -p nophys gcm
fonctionne. FH
IM

Location:
LMDZ4/trunk/libf/phy_IPCC_AR4
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phy_IPCC_AR4/conf_phys.F90

    r868 r956  
    9292  REAL,SAVE :: cvl_corr_omp
    9393  LOGICAL,SAVE :: ok_lic_melt_omp
     94
     95  LOGICAL,SAVE :: cycle_diurne_omp,soil_model_omp,new_oliq_omp
     96  LOGICAL,SAVE :: ok_orodr_omp, ok_orolf_omp, ok_limitvrai_omp
     97  INTEGER, SAVE :: nbapp_rad_omp, iflag_con_omp
     98
    9499!
    95100!
     
    351356
    352357
     358!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     359! FH 2008/05/02
     360! Constantes precedemment dans dyn3d/conf_gcm
     361
     362!Config  Key  = cycle_diurne
     363!Config  Desc = Cycle ddiurne
     364!Config  Def  = y
     365!Config  Help = Cette option permet d'eteidre le cycle diurne.
     366!Config         Peut etre util pour accelerer le code !
     367       cycle_diurne_omp = .TRUE.
     368       CALL getin('cycle_diurne',cycle_diurne_omp)
     369
     370!Config  Key  = soil_model
     371!Config  Desc = Modele de sol
     372!Config  Def  = y
     373!Config  Help = Choix du modele de sol (Thermique ?)
     374!Config         Option qui pourait un string afin de pouvoir
     375!Config         plus de choix ! Ou meme une liste d'options !
     376       soil_model_omp = .TRUE.
     377       CALL getin('soil_model',soil_model_omp)
     378
     379!Config  Key  = new_oliq
     380!Config  Desc = Nouvelle eau liquide
     381!Config  Def  = y
     382!Config  Help = Permet de mettre en route la
     383!Config         nouvelle parametrisation de l'eau liquide !
     384       new_oliq_omp = .TRUE.
     385       CALL getin('new_oliq',new_oliq_omp)
     386
     387!Config  Key  = ok_orodr
     388!Config  Desc = Orodr ???
     389!Config  Def  = y
     390!Config  Help = Y en a pas comprendre !
     391!Config         
     392       ok_orodr_omp = .TRUE.
     393       CALL getin('ok_orodr',ok_orodr_omp)
     394
     395!Config  Key  =  ok_orolf
     396!Config  Desc = Orolf ??
     397!Config  Def  = y
     398!Config  Help = Connais pas !
     399       ok_orolf_omp = .TRUE.
     400       CALL getin('ok_orolf_omp', ok_orolf_omp)
     401
     402!Config  Key  = ok_limitvrai
     403!Config  Desc = Force la lecture de la bonne annee
     404!Config  Def  = n
     405!Config  Help = On peut forcer le modele a lire le
     406!Config         fichier SST de la bonne annee. C'est une tres bonne
     407!Config         idee, pourquoi ne pas mettre toujours a y ???
     408       ok_limitvrai_omp = .FALSE.
     409       CALL getin('ok_limitvrai',ok_limitvrai_omp)
     410
     411!Config  Key  = nbapp_rad
     412!Config  Desc = Frequence d'appel au rayonnement
     413!Config  Def  = 12
     414!Config  Help = Nombre  d'appels des routines de rayonnements
     415!Config         par jour.
     416       nbapp_rad_omp = 12
     417       CALL getin('nbapp_rad',nbapp_rad_omp)
     418
     419!Config  Key  = iflag_con
     420!Config  Desc = Flag de convection
     421!Config  Def  = 2
     422!Config  Help = Flag  pour la convection les options suivantes existent :
     423!Config         1 pour LMD,
     424!Config         2 pour Tiedtke,
     425!Config         3 pour CCM(NCAR) 
     426       iflag_con_omp = 2
     427       CALL getin('iflag_con',iflag_con_omp)
     428
     429!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    353430!Config Key  = epmax
    354431!Config Desc = Efficacite precip
     
    789866    CFC12_ppt = CFC12_ppt_omp
    790867    RCFC12 = RCFC12_omp
     868
     869
     870    cycle_diurne = cycle_diurne_omp
     871    soil_model = soil_model_omp
     872    new_oliq = new_oliq_omp
     873    ok_orodr = ok_orodr_omp
     874    ok_orolf = ok_orolf_omp
     875    ok_limitvrai = ok_limitvrai_omp
     876    nbapp_rad = nbapp_rad_omp
     877    iflag_con = iflag_con_omp
     878
     879
    791880    epmax = epmax_omp
    792881    ok_adj_ema = ok_adj_ema_omp
     
    878967  write(numout,*)' cvl_corr=', cvl_corr
    879968  write(numout,*)'ok_lic_melt=', ok_lic_melt
     969  write(numout,*)'cycle_diurne=',cycle_diurne
     970  write(numout,*)'soil_model=',soil_model
     971  write(numout,*)'new_oliq=',new_oliq
     972  write(numout,*)'ok_orodr=',ok_orodr
     973  write(numout,*)'ok_orolf=',ok_orolf
     974  write(numout,*)'ok_limitvrai=',ok_limitvrai
     975  write(numout,*)'nbapp_rad=',nbapp_rad
     976  write(numout,*)'iflag_con=',iflag_con
    880977  write(numout,*)' epmax = ', epmax
    881978  write(numout,*)' ok_adj_ema = ', ok_adj_ema
  • LMDZ4/trunk/libf/phy_IPCC_AR4/ini_histrac.h

    r868 r956  
    2323
    2424         zsto = pdtphys
    25          zout = pdtphys * ecrit_tra
     25!         zout = pdtphys * ecrit_tra
     26         zout = ecrit_tra
    2627c
    2728         CALL histdef(nid_tra, "phis", "Surface geop. height", "-",
  • LMDZ4/trunk/libf/phy_IPCC_AR4/phyetat0.F

    r868 r956  
    77     .           rlat_p, rlon_p, pctsrf_p, tsol_p,
    88     .           ocean_in, ok_veget_in,
    9      .           albe_p, alblw_p,
     9     .           alb1_p, alb2_p,
    1010     .           rain_fall_p, snow_fall_p,solsw_p, sollw_p,
    1111     .           radsol_p,clesphy0,
     
    3737#include "clesphys.h"
    3838#include "temps.h"
     39#include "thermcell.h"
     40#include "compbl.h"
    3941c======================================================================
    4042      CHARACTER*(*) fichnom
     
    5052      REAL qsol_p(klon)
    5153      REAL snow_p(klon,nbsrf)
    52       REAL albe_p(klon,nbsrf)
    53 cIM BEG alblw
    54       REAL alblw_p(klon,nbsrf)
    55 cIM END alblw
     54      REAL alb1_p(klon,nbsrf)   ! albedo in visible SW interval
     55      REAL alb2_p(klon,nbsrf)   ! albedo in near IR interval
    5656      REAL evap_p(klon,nbsrf)
    5757      REAL radsol_p(klon)
     
    8989      REAL qsol(klon_glo)
    9090      REAL snow(klon_glo,nbsrf)
    91       REAL albe(klon_glo,nbsrf)
    92       REAL alblw(klon_glo,nbsrf)
     91      REAL alb1(klon_glo,nbsrf)
     92      REAL alb2(klon_glo,nbsrf)
    9393      REAL evap(klon_glo,nbsrf)
    9494      REAL radsol(klon_glo)
     
    127127c
    128128      INTEGER nid, nvarid
    129       INTEGER ierr, i, nsrf, isoil
     129      INTEGER ierr, i, nsrf, isoil ,k
    130130      INTEGER length
    131131      PARAMETER (length=100)
     
    134134      CHARACTER*7 str7
    135135      CHARACTER*2 str2
    136       real iolat(jjm+1)
     136
     137c FH1D
     138c     real iolat(jjm+1)
     139      real iolat(jjm+1-1/iim)
    137140c
    138141c Ouvrir le fichier contenant l'etat initial:
     
    181184       
    182185c
    183        
     186!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     187! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique
     188! Les constantes de la physiques sont lues dans la physique seulement.
     189! Les egalites du type
     190!             tab_cntrl( 5 )=clesphy0(1)
     191! sont remplacees par
     192!             clesphy0(1)=tab_cntrl( 5 )
     193! On inverse aussi la logique.
     194! On remplit les tab_cntrl avec les parametres lus dans les .def
     195!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     196
    184197         DO i = 1, length
    185198           tabcntr0( i ) = tab_cntrl( i )
    186199         ENDDO
    187200c
    188          cycle_diurne   = .FALSE.
    189          soil_model     = .FALSE.
    190          new_oliq       = .FALSE.
    191          ok_orodr       = .FALSE.
    192          ok_orolf       = .FALSE.
    193          ok_limitvrai   = .FALSE.
    194 
    195 
    196          IF( clesphy0(1).NE.tab_cntrl( 5 ) )  THEN
    197              tab_cntrl( 5 ) = clesphy0(1)
    198          ENDIF
    199 
    200          IF( clesphy0(2).NE.tab_cntrl( 6 ) )  THEN
    201              tab_cntrl( 6 ) = clesphy0(2)
    202          ENDIF
    203 
    204          IF( clesphy0(3).NE.tab_cntrl( 7 ) )  THEN
    205              tab_cntrl( 7 ) = clesphy0(3)
    206          ENDIF
    207 
    208          IF( clesphy0(4).NE.tab_cntrl( 8 ) )  THEN
    209              tab_cntrl( 8 ) = clesphy0(4)
    210          ENDIF
    211 
    212          IF( clesphy0(5).NE.tab_cntrl( 9 ) )  THEN
    213              tab_cntrl( 9 ) = clesphy0( 5 )
    214          ENDIF
    215 
    216          IF( clesphy0(6).NE.tab_cntrl( 10 ) )  THEN
    217              tab_cntrl( 10 ) = clesphy0( 6 )
    218          ENDIF
    219 
    220          IF( clesphy0(7).NE.tab_cntrl( 11 ) )  THEN
    221              tab_cntrl( 11 ) = clesphy0( 7 )
    222          ENDIF
    223 
    224          IF( clesphy0(8).NE.tab_cntrl( 12 ) )  THEN
    225              tab_cntrl( 12 ) = clesphy0( 8 )
    226          ENDIF
    227 
    228 
    229          dtime        = tab_cntrl(1)
    230          radpas       = tab_cntrl(2)
     201         tab_cntrl(1)=dtime
     202         tab_cntrl(2)=radpas
    231203         co2_ppm_etat0      = tab_cntrl(3)
    232204         solaire_etat0      = tab_cntrl(4)
    233          iflag_con    = tab_cntrl(5)
    234          nbapp_rad    = tab_cntrl(6)
    235 
    236 
    237          cycle_diurne    = .FALSE.
    238          soil_model      = .FALSE.
    239          new_oliq        = .FALSE.
    240          ok_orodr        = .FALSE.
    241          ok_orolf        = .FALSE.
    242          ok_limitvrai    = .FALSE.
    243 
    244          IF( tab_cntrl( 7) .EQ. 1. )    cycle_diurne  = .TRUE.
    245          IF( tab_cntrl( 8) .EQ. 1. )       soil_model = .TRUE.
    246          IF( tab_cntrl( 9) .EQ. 1. )         new_oliq = .TRUE.
    247          IF( tab_cntrl(10) .EQ. 1. )         ok_orodr = .TRUE.
    248          IF( tab_cntrl(11) .EQ. 1. )         ok_orolf = .TRUE.
    249          IF( tab_cntrl(12) .EQ. 1. )     ok_limitvrai = .TRUE.
     205         tab_cntrl(5)=iflag_con
     206         tab_cntrl(6)=nbapp_rad
     207
     208         if (cycle_diurne) tab_cntrl( 7) =1.
     209         if (soil_model) tab_cntrl( 8) =1.
     210         if (new_oliq) tab_cntrl( 9) =1.
     211         if (ok_orodr) tab_cntrl(10) =1.
     212         if (ok_orolf) tab_cntrl(11) =1.
     213         if (ok_limitvrai) tab_cntrl(12) =1.
    250214
    251215
    252216      itau_phy = tab_cntrl(15)
     217
     218       
     219
     220         IF( clesphy0(1).NE.tab_cntrl( 5 ) )  THEN
     221             clesphy0(1)=tab_cntrl( 5 )
     222         ENDIF
     223
     224         IF( clesphy0(2).NE.tab_cntrl( 6 ) )  THEN
     225             clesphy0(2)=tab_cntrl( 6 )
     226         ENDIF
     227
     228         IF( clesphy0(3).NE.tab_cntrl( 7 ) )  THEN
     229             clesphy0(3)=tab_cntrl( 7 )
     230         ENDIF
     231
     232         IF( clesphy0(4).NE.tab_cntrl( 8 ) )  THEN
     233             clesphy0(4)=tab_cntrl( 8 )
     234         ENDIF
     235
     236         IF( clesphy0(5).NE.tab_cntrl( 9 ) )  THEN
     237             clesphy0(5)=tab_cntrl( 9 )
     238         ENDIF
     239
     240         IF( clesphy0(6).NE.tab_cntrl( 10 ) )  THEN
     241             clesphy0(6)=tab_cntrl( 10 )
     242         ENDIF
     243
     244         IF( clesphy0(7).NE.tab_cntrl( 11 ) )  THEN
     245             clesphy0(7)=tab_cntrl( 11 )
     246         ENDIF
     247
     248         IF( clesphy0(8).NE.tab_cntrl( 12 ) )  THEN
     249             clesphy0(8)=tab_cntrl( 12 )
     250         ENDIF
     251
    253252
    254253c
     
    721720      ENDIF
    722721c
    723 c Lecture de albedo au sol:
     722c Lecture de albedo de l'interval visible au sol:
    724723c
    725724      ierr = NF_INQ_VARID (nid, "ALBE", nvarid)
     
    739738           ENDIF
    740739#ifdef NC_DOUBLE
    741            ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,nsrf))
    742 #else
    743            ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,nsrf))
     740           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb1(1,nsrf))
     741#else
     742           ierr = NF_GET_VAR_REAL(nid, nvarid, alb1(1,nsrf))
    744743#endif
    745744           IF (ierr.NE.NF_NOERR) THEN
     
    750749           xmax = -1.0E+20
    751750           DO i = 1, klon_glo
    752               xmin = MIN(albe(i,nsrf),xmin)
    753               xmax = MAX(albe(i,nsrf),xmax)
     751              xmin = MIN(alb1(i,nsrf),xmin)
     752              xmax = MAX(alb1(i,nsrf),xmax)
    754753           ENDDO
    755754           PRINT*,'Albedo du sol ALBE**:', nsrf, xmin, xmax
     
    759758         PRINT*, '          J ignore donc les autres ALBE**'
    760759#ifdef NC_DOUBLE
    761          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,1))
    762 #else
    763          ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,1))
     760         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb1(1,1))
     761#else
     762         ierr = NF_GET_VAR_REAL(nid, nvarid, alb1(1,1))
    764763#endif
    765764         IF (ierr.NE.NF_NOERR) THEN
     
    770769         xmax = -1.0E+20
    771770         DO i = 1, klon_glo
    772             xmin = MIN(albe(i,1),xmin)
    773             xmax = MAX(albe(i,1),xmax)
     771            xmin = MIN(alb1(i,1),xmin)
     772            xmax = MAX(alb1(i,1),xmax)
    774773         ENDDO
    775774         PRINT*,'Neige du sol <ALBE>', xmin, xmax
    776775         DO nsrf = 2, nbsrf
    777776         DO i = 1, klon_glo
    778             albe(i,nsrf) = albe(i,1)
    779          ENDDO
    780          ENDDO
    781       ENDIF
    782 
    783 c
    784 c Lecture de albedo au sol LW:
     777            alb1(i,nsrf) = alb1(i,1)
     778         ENDDO
     779         ENDDO
     780      ENDIF
     781
     782c
     783c Lecture de albedo au sol dans l'interval proche infra-rouge:
    785784c
    786785      ierr = NF_INQ_VARID (nid, "ALBLW", nvarid)
     
    791790         DO nsrf = 1, nbsrf
    792791           DO i = 1, klon_glo
    793              alblw(i,nsrf) = albe(i,nsrf)
     792             alb2(i,nsrf) = alb1(i,nsrf)
    794793           ENDDO
    795794         ENDDO
     
    798797         PRINT*, '          J ignore donc les autres ALBLW**'
    799798#ifdef NC_DOUBLE
    800          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alblw(1,1))
    801 #else
    802          ierr = NF_GET_VAR_REAL(nid, nvarid, alblw(1,1))
     799         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb2(1,1))
     800#else
     801         ierr = NF_GET_VAR_REAL(nid, nvarid, alb2(1,1))
    803802#endif
    804803         IF (ierr.NE.NF_NOERR) THEN
     
    809808         xmax = -1.0E+20
    810809         DO i = 1, klon_glo
    811             xmin = MIN(alblw(i,1),xmin)
    812             xmax = MAX(alblw(i,1),xmax)
     810            xmin = MIN(alb2(i,1),xmin)
     811            xmax = MAX(alb2(i,1),xmax)
    813812         ENDDO
    814813         PRINT*,'Neige du sol <ALBLW>', xmin, xmax
    815814         DO nsrf = 2, nbsrf
    816815         DO i = 1, klon_glo
    817             alblw(i,nsrf) = alblw(i,1)
     816            alb2(i,nsrf) = alb2(i,1)
    818817         ENDDO
    819818         ENDDO
     
    14271426
    14281427c
    1429       ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
    1430       IF (ierr.NE.NF_NOERR) THEN
    1431          PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
    1432          PRINT*, "Depart legerement fausse. Mais je continue"
    1433          ancien_ok = .FALSE.
    1434       ELSE
    1435 #ifdef NC_DOUBLE
    1436          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
    1437 #else
    1438          ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
    1439 #endif
    1440          IF (ierr.NE.NF_NOERR) THEN
    1441             PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
    1442             CALL abort
    1443          ENDIF
    1444       ENDIF
    1445 c
    14461428c Lecture ratqs
    14471429c
     
    14921474      xmax = MAXval(run_off_lic_0)
    14931475      PRINT*,'(ecart-type) run_off_lic_0:', xmin, xmax
    1494 c
     1476
     1477
    14951478c Fermer le fichier:
    14961479c
     
    15031486cym  en attendant mieux
    15041487        iolat(1)=rlat(1)
    1505         iolat(jjm+1)=rlat(klon_glo)
     1488
     1489!FH1D   
     1490!iolat(jjm+1)=rlat(klon_glo)
     1491        iolat(jjm+1-1/iim)=rlat(klon_glo)
     1492        if (iim.gt.1) then
    15061493        do i=2,jjm
    15071494          iolat(i)=rlat(2+(i-2)*iim)
    15081495        enddo
     1496        endif
     1497
    15091498        CALL bcast_mpi(iolat)
    15101499        CALL bcast_mpi(rlon)
    1511         call init_iophy(iolat,rlon(2:iim+1))
     1500
     1501!FH1D
     1502!       call init_iophy(iolat,rlon(2:iim+1))
     1503        call init_iophy(iolat,rlon(2-1/iim:iim+1-1/iim))
    15121504       
    15131505c$OMP END MASTER
     
    15221514      call Scatter( qsol,qsol_p)
    15231515      call Scatter( snow,snow_p)
    1524       call Scatter( albe,albe_p)
    1525       call Scatter( alblw,alblw_p)
     1516      call Scatter( alb1,alb1_p)
     1517      call Scatter( alb2,alb2_p)
    15261518      call Scatter( evap,evap_p)
    15271519      call Scatter( radsol,radsol_p)
  • LMDZ4/trunk/libf/phy_IPCC_AR4/physiq.F

    r868 r956  
    15821582         itaprad = 0
    15831583
     1584!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1585! FH 2008/05/02 changement lie a la lecture de nbapp_rad dans phylmd
     1586! plutot que
     1587! dyn3d
     1588! Attention : la version precedente n'etait pas tres propre.
     1589! Il se peut qu'il faille prendre une valeur differente de nbapp_rad
     1590! pour obtenir le meme resultat.
     1591         dtime=pdtphys
     1592         radpas = NINT( 86400./dtime/nbapp_rad)
     1593!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1594
    15841595         CALL phyetat0 ("startphy.nc",dtime,co2_ppm_etat0,solaire_etat0,
    15851596     .       rlat,rlon,pctsrf, ftsol,
     
    16011612      ENDDO
    16021613
    1603          radpas = NINT( 86400./dtime/nbapp_rad)
    16041614c
    16051615C on remet le calendrier a zero
  • LMDZ4/trunk/libf/phy_IPCC_AR4/phytrac.F

    r868 r956  
    428428
    429429c jg: c'est ca qu'on veut?????           
    430           ecrit_tra = FLOAT(NINT(86400./pdtphys *ecritphy))
    431           print*,'dans phytrac ',pdtphys,ecritphy,ecrit_tra
     430!          ecrit_tra = FLOAT(NINT(86400./pdtphys *ecritphy))
     431          print*,'dans phytrac ',pdtphys,ecrit_tra
    432432
    433433         if(nbtr.lt.nqmax) then
Note: See TracChangeset for help on using the changeset viewer.