! ! $Id $ ! subroutine phyetat0(fichnom) ! Load initial state for the physics ! and do some resulting initializations USE dimphy USE mod_grid_phy_lmdz USE mod_phys_lmdz_para USE iophy USE phys_state_var_mod USE iostart USE infotrac USE comgeomphy, only: rlatd,rlond USE control_mod, only: raz_date implicit none !====================================================================== ! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818 ! Objet: Lecture de l'etat initial pour la physique !====================================================================== #include "dimensions.h" #include "netcdf.inc" #include "dimsoil.h" #include "clesphys.h" #include "tabcontrol.h" #include "temps.h" !====================================================================== character(len=*),intent(in) :: fichnom ! input file name REAL :: xmin, xmax LOGICAL :: found REAL :: tab_cntrl(length) integer :: i,isoil CHARACTER(len=2) :: str2 ! les variables globales lues dans le fichier restart ! open physics initial state file: call open_startphy(fichnom) ! ! Lecture des parametres de controle: ! CALL get_var("controle",tab_cntrl,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF DO i = 1, length tabcntr0( i ) = tab_cntrl( i ) ENDDO dtime = tab_cntrl(1) radpas = tab_cntrl(2) itau_phy = tab_cntrl(15) ! Attention si raz_date est active : ! il faut remettre a zero itau_phy apres phyetat0 ! IF (raz_date.eq.1) THEN itau_phy=0 ENDIF ! read latitudes call get_field("latitude",rlatd,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF ! read longitudes call get_field("longitude",rlond,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF ! read in other variables here ... ! Lecture des temperatures du sol: CALL get_field("TS",ftsol(:),found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' PRINT*, "phyetat0: Lecture echouee pour " CALL abort ELSE PRINT*, 'phyetat0: Le champ est present' xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(ftsol(i),xmin) xmax = MAX(ftsol(i),xmax) ENDDO PRINT*,'Temperature du sol ', xmin, xmax ENDIF ! Lecture des temperatures du sol profond: DO isoil=1, nsoilmx IF (isoil.GT.99) THEN PRINT*, "Trop de couches" CALL abort ENDIF WRITE(str2,'(i2.2)') isoil CALL get_field('Tsoil'//str2,ftsoil(:,isoil),found) IF (.not.found) THEN PRINT*, "phyetat0: Le champ est absent" PRINT*, " Il prend donc la valeur de surface" DO i=1, klon ftsoil(i,isoil)=ftsol(i) ENDDO ENDIF ENDDO ! Lecture de albedo au sol: CALL get_field("ALBE", falbe,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' PRINT*, "phyetat0: Lecture echouee pour " CALL abort ELSE xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(falbe(i),xmin) xmax = MAX(falbe(i),xmax) ENDDO PRINT*,'Albedo du sol ', xmin, xmax ENDIF ! Lecture rayonnement solaire au sol: CALL get_field("solsw",solsw,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' PRINT*, 'mis a zero' solsw = 0. ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(solsw(i),xmin) xmax = MAX(solsw(i),xmax) ENDDO PRINT*,'Rayonnement solaire au sol solsw:', xmin, xmax ! Lecture rayonnement IR au sol: CALL get_field("sollw",sollw,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' PRINT*, 'mis a zero' sollw = 0. ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(sollw(i),xmin) xmax = MAX(sollw(i),xmax) ENDDO PRINT*,'Rayonnement IR au sol sollw:', xmin, xmax ! Lecture derive des flux: CALL get_field("fder",fder,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' PRINT*, 'mis a zero' fder = 0. ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(fder(i),xmin) xmax = MAX(fder(i),xmax) ENDDO PRINT*,'Derive des flux fder:', xmin, xmax ! Lecture derive flux IR: CALL get_field("dlw",dlw,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' PRINT*, 'mis a zero' dlw = 0. ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(dlw(i),xmin) xmax = MAX(dlw(i),xmax) ENDDO PRINT*,'Derive flux IR dlw:', xmin, xmax ! Lecture rayonnement IR vers le bas au sol: CALL get_field("sollwdown",sollwdown,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' PRINT*, 'mis a zero' sollwdown = 0. ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(sollwdown(i),xmin) xmax = MAX(sollwdown(i),xmax) ENDDO PRINT*,'Flux IR vers le bas au sol sollwdown:', xmin, xmax ! Lecture du rayonnement net au sol: CALL get_field("RADS",radsol,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(radsol(i),xmin) xmax = MAX(radsol(i),xmax) ENDDO PRINT*,'Rayonnement net au sol radsol:', xmin, xmax ! Lecture de l'orographie sous-maille si ok_orodr: if(ok_orodr) then CALL get_field("ZMEA",zmea,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(zmea(i),xmin) xmax = MAX(zmea(i),xmax) ENDDO PRINT*,'OROGRAPHIE SOUS-MAILLE zmea:', xmin, xmax CALL get_field("ZSTD",zstd,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(zstd(i),xmin) xmax = MAX(zstd(i),xmax) ENDDO PRINT*,'OROGRAPHIE SOUS-MAILLE zstd:', xmin, xmax CALL get_field("ZSIG",zsig,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(zsig(i),xmin) xmax = MAX(zsig(i),xmax) ENDDO PRINT*,'OROGRAPHIE SOUS-MAILLE zsig:', xmin, xmax CALL get_field("ZGAM",zgam,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(zgam(i),xmin) xmax = MAX(zgam(i),xmax) ENDDO PRINT*,'OROGRAPHIE SOUS-MAILLE zgam:', xmin, xmax CALL get_field("ZTHE",zthe,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(zthe(i),xmin) xmax = MAX(zthe(i),xmax) ENDDO PRINT*,'OROGRAPHIE SOUS-MAILLE zthe:', xmin, xmax CALL get_field("ZPIC",zpic,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(zpic(i),xmin) xmax = MAX(zpic(i),xmax) ENDDO PRINT*,'OROGRAPHIE SOUS-MAILLE zpic:', xmin, xmax CALL get_field("ZVAL",zval,found) IF (.not.found) THEN PRINT*, 'phyetat0: Le champ est absent' CALL abort ENDIF xmin = 1.0E+20 xmax = -1.0E+20 DO i = 1, klon xmin = MIN(zval(i),xmin) xmax = MAX(zval(i),xmax) ENDDO PRINT*,'OROGRAPHIE SOUS-MAILLE zval:', xmin, xmax else zmea = 0. zstd = 0. zsig = 0. zgam = 0. zthe = 0. zpic = 0. zval = 0. endif ! fin test sur ok_orodr ! Lecture de TANCIEN: ancien_ok = .TRUE. CALL get_field("TANCIEN",t_ancien,found) IF (.not.found) THEN PRINT*, "phyetat0: Le champ est absent" PRINT*, "Depart legerement fausse. Mais je continue" ancien_ok = .FALSE. ENDIF ! close file call close_startphy ! do some more initializations call init_iophy_new(rlatd,rlond) end subroutine phyetat0