Ignore:
Timestamp:
May 9, 2008, 6:17:59 PM (16 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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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)
Note: See TracChangeset for help on using the changeset viewer.