--- trunk/Sources/phylmd/phyetat0.f 2015/07/16 17:39:10 156 +++ trunk/Sources/phylmd/phyetat0.f 2015/07/20 16:01:49 157 @@ -16,7 +16,7 @@ snow, albe, evap, rain_fall, snow_fall, solsw, sollw, fder, & radsol, frugs, agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, & t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon, run_off_lic_0, & - sig1, w01) + sig1, w01, ncid_startphy) ! From phylmd/phyetat0.F, version 1.4 2005/06/03 10:03:07 ! Author: Z.X. Li (LMD/CNRS) @@ -65,10 +65,11 @@ real, intent(out):: w01(klon, klev) ! vertical velocity within adiabatic updraft + integer, intent(out):: ncid_startphy + ! Local: REAL fractint(klon) - REAL xmin, xmax - INTEGER ncid, varid, ndims + INTEGER varid, ndims INTEGER ierr, i !--------------------------------------------------------------- @@ -76,24 +77,24 @@ print *, "Call sequence information: phyetat0" ! Fichier contenant l'état initial : - call NF95_OPEN("startphy.nc", NF90_NOWRITE, ncid) + call NF95_OPEN("startphy.nc", NF90_NOWRITE, ncid_startphy) - call nf95_get_att(ncid, nf90_global, "itau_phy", itau_phy) + call nf95_get_att(ncid_startphy, nf90_global, "itau_phy", itau_phy) ! Lecture des latitudes (coordonnees): - call NF95_INQ_VARID(ncid, "latitude", varid) - call NF95_GET_VAR(ncid, varid, rlat) + call NF95_INQ_VARID(ncid_startphy, "latitude", varid) + call NF95_GET_VAR(ncid_startphy, varid, rlat) ! Lecture des longitudes (coordonnees): - call NF95_INQ_VARID(ncid, "longitude", varid) - call NF95_GET_VAR(ncid, varid, rlon) + call NF95_INQ_VARID(ncid_startphy, "longitude", varid) + call NF95_GET_VAR(ncid_startphy, varid, rlon) ! Lecture du masque terre mer - call NF95_INQ_VARID(ncid, "masque", varid) - call nf95_get_var(ncid, varid, zmasq) + call NF95_INQ_VARID(ncid_startphy, "masque", varid) + call nf95_get_var(ncid_startphy, varid, zmasq) ! Lecture des fractions pour chaque sous-surface @@ -103,36 +104,36 @@ ! fraction de terre - ierr = NF90_INQ_VARID(ncid, "FTER", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "FTER", varid) IF (ierr == NF90_NOERR) THEN - call nf95_get_var(ncid, varid, pctsrf(:, is_ter)) + call nf95_get_var(ncid_startphy, varid, pctsrf(:, is_ter)) else PRINT *, 'phyetat0: Le champ est absent' ENDIF ! fraction de glace de terre - ierr = NF90_INQ_VARID(ncid, "FLIC", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "FLIC", varid) IF (ierr == NF90_NOERR) THEN - call nf95_get_var(ncid, varid, pctsrf(:, is_lic)) + call nf95_get_var(ncid_startphy, varid, pctsrf(:, is_lic)) else PRINT *, 'phyetat0: Le champ est absent' ENDIF ! fraction d'ocean - ierr = NF90_INQ_VARID(ncid, "FOCE", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "FOCE", varid) IF (ierr == NF90_NOERR) THEN - call nf95_get_var(ncid, varid, pctsrf(:, is_oce)) + call nf95_get_var(ncid_startphy, varid, pctsrf(:, is_oce)) else PRINT *, 'phyetat0: Le champ est absent' ENDIF ! fraction glace de mer - ierr = NF90_INQ_VARID(ncid, "FSIC", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "FSIC", varid) IF (ierr == NF90_NOERR) THEN - call nf95_get_var(ncid, varid, pctsrf(:, is_sic)) + call nf95_get_var(ncid_startphy, varid, pctsrf(:, is_sic)) else PRINT *, 'phyetat0: Le champ est absent' ENDIF @@ -157,20 +158,20 @@ END DO ! Lecture des temperatures du sol: - call NF95_INQ_VARID(ncid, "TS", varid) - call nf95_inquire_variable(ncid, varid, ndims = ndims) + call NF95_INQ_VARID(ncid_startphy, "TS", varid) + call nf95_inquire_variable(ncid_startphy, varid, ndims = ndims) if (ndims == 2) then - call NF95_GET_VAR(ncid, varid, tsol) + call NF95_GET_VAR(ncid_startphy, varid, tsol) else print *, "Found only one surface type for soil temperature." - call nf95_get_var(ncid, varid, tsol(:, 1)) + call nf95_get_var(ncid_startphy, varid, tsol(:, 1)) tsol(:, 2:nbsrf) = spread(tsol(:, 1), dim = 2, ncopies = nbsrf - 1) end if ! Lecture des temperatures du sol profond: - call NF95_INQ_VARID(ncid, 'Tsoil', varid) - call NF95_GET_VAR(ncid, varid, tsoil) + call NF95_INQ_VARID(ncid_startphy, 'Tsoil', varid) + call NF95_GET_VAR(ncid_startphy, varid, tsoil) !IM "slab" ocean ! Lecture de tslab (pour slab ocean seulement): @@ -179,21 +180,14 @@ ! Lecture de l'humidite de l'air juste au dessus du sol: - call NF95_INQ_VARID(ncid, "QS", varid) - call nf95_get_var(ncid, varid, qsurf) - xmin = 1.0E+20 - xmax = -1.0E+20 - DO i = 1, klon - xmin = MIN(qsurf(i, 1), xmin) - xmax = MAX(qsurf(i, 1), xmax) - ENDDO - PRINT *, 'Humidite pres du sol ', xmin, xmax + call NF95_INQ_VARID(ncid_startphy, "QS", varid) + call nf95_get_var(ncid_startphy, varid, qsurf) ! Eau dans le sol (pour le modele de sol "bucket") - ierr = NF90_INQ_VARID(ncid, "QSOL", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "QSOL", varid) IF (ierr == NF90_NOERR) THEN - call nf95_get_var(ncid, varid, qsol) + call nf95_get_var(ncid_startphy, varid, qsol) else PRINT *, 'phyetat0: Le champ est absent' PRINT *, ' Valeur par defaut nulle' @@ -202,301 +196,166 @@ ! Lecture de neige au sol: - call NF95_INQ_VARID(ncid, "SNOW", varid) - call nf95_get_var(ncid, varid, snow) - xmin = 1.0E+20 - xmax = -1.0E+20 - DO i = 1, klon - xmin = MIN(snow(i, 1), xmin) - xmax = MAX(snow(i, 1), xmax) - ENDDO - PRINT *, 'Neige du sol ', xmin, xmax + call NF95_INQ_VARID(ncid_startphy, "SNOW", varid) + call nf95_get_var(ncid_startphy, varid, snow) ! Lecture de albedo au sol: - call NF95_INQ_VARID(ncid, "ALBE", varid) - call nf95_get_var(ncid, varid, albe) - xmin = 1.0E+20 - xmax = -1.0E+20 - DO i = 1, klon - xmin = MIN(albe(i, 1), xmin) - xmax = MAX(albe(i, 1), xmax) - ENDDO - PRINT *, 'Neige du sol ', xmin, xmax + call NF95_INQ_VARID(ncid_startphy, "ALBE", varid) + call nf95_get_var(ncid_startphy, varid, albe) ! Lecture de evaporation: - call NF95_INQ_VARID(ncid, "EVAP", varid) - call nf95_get_var(ncid, varid, evap) - xmin = 1.0E+20 - xmax = -1.0E+20 - DO i = 1, klon - xmin = MIN(evap(i, 1), xmin) - xmax = MAX(evap(i, 1), xmax) - ENDDO - PRINT *, 'Evap du sol ', xmin, xmax + call NF95_INQ_VARID(ncid_startphy, "EVAP", varid) + call nf95_get_var(ncid_startphy, varid, evap) ! Lecture precipitation liquide: - call NF95_INQ_VARID(ncid, "rain_f", varid) - call NF95_GET_VAR(ncid, varid, rain_fall) + call NF95_INQ_VARID(ncid_startphy, "rain_f", varid) + call NF95_GET_VAR(ncid_startphy, varid, rain_fall) ! Lecture precipitation solide: - call NF95_INQ_VARID(ncid, "snow_f", varid) - call NF95_GET_VAR(ncid, varid, snow_fall) - xmin = 1.0E+20 - xmax = -1.0E+20 - DO i = 1, klon - xmin = MIN(snow_fall(i), xmin) - xmax = MAX(snow_fall(i), xmax) - ENDDO - PRINT *, 'Precipitation solide snow_f:', xmin, xmax + call NF95_INQ_VARID(ncid_startphy, "snow_f", varid) + call NF95_GET_VAR(ncid_startphy, varid, snow_fall) ! Lecture rayonnement solaire au sol: - ierr = NF90_INQ_VARID(ncid, "solsw", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "solsw", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, 'phyetat0: Le champ est absent' PRINT *, 'mis a zero' solsw = 0. ELSE - call nf95_get_var(ncid, varid, solsw) + call nf95_get_var(ncid_startphy, varid, solsw) 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 IF au sol: - ierr = NF90_INQ_VARID(ncid, "sollw", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "sollw", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, 'phyetat0: Le champ est absent' PRINT *, 'mis a zero' sollw = 0. ELSE - call nf95_get_var(ncid, varid, sollw) + call nf95_get_var(ncid_startphy, varid, sollw) ENDIF - PRINT *, 'Rayonnement IF au sol sollw:', minval(sollw), maxval(sollw) ! Lecture derive des flux: - ierr = NF90_INQ_VARID(ncid, "fder", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "fder", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, 'phyetat0: Le champ est absent' PRINT *, 'mis a zero' fder = 0. ELSE - call nf95_get_var(ncid, varid, fder) + call nf95_get_var(ncid_startphy, varid, fder) 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 du rayonnement net au sol: - call NF95_INQ_VARID(ncid, "RADS", varid) - call NF95_GET_VAR(ncid, varid, radsol) - 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 + call NF95_INQ_VARID(ncid_startphy, "RADS", varid) + call NF95_GET_VAR(ncid_startphy, varid, radsol) ! Lecture de la longueur de rugosite - call NF95_INQ_VARID(ncid, "RUG", varid) - call nf95_get_var(ncid, varid, frugs) - xmin = 1.0E+20 - xmax = -1.0E+20 - DO i = 1, klon - xmin = MIN(frugs(i, 1), xmin) - xmax = MAX(frugs(i, 1), xmax) - ENDDO - PRINT *, 'rugosite ', xmin, xmax + call NF95_INQ_VARID(ncid_startphy, "RUG", varid) + call nf95_get_var(ncid_startphy, varid, frugs) ! Lecture de l'age de la neige: - call NF95_INQ_VARID(ncid, "AGESNO", varid) - call nf95_get_var(ncid, varid, agesno) - xmin = 1.0E+20 - xmax = -1.0E+20 - DO i = 1, klon - xmin = MIN(agesno(i, 1), xmin) - xmax = MAX(agesno(i, 1), xmax) - ENDDO - PRINT *, 'Age de la neige ', xmin, xmax - - call NF95_INQ_VARID(ncid, "ZMEA", varid) - call NF95_GET_VAR(ncid, varid, zmea) - 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 NF95_INQ_VARID(ncid, "ZSTD", varid) - call NF95_GET_VAR(ncid, varid, zstd) - 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 NF95_INQ_VARID(ncid, "ZSIG", varid) - call NF95_GET_VAR(ncid, varid, zsig) - 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 NF95_INQ_VARID(ncid, "ZGAM", varid) - call NF95_GET_VAR(ncid, varid, zgam) - 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 NF95_INQ_VARID(ncid, "ZTHE", varid) - call NF95_GET_VAR(ncid, varid, zthe) - 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 NF95_INQ_VARID(ncid, "ZPIC", varid) - call NF95_GET_VAR(ncid, varid, zpic) - 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 NF95_INQ_VARID(ncid, "ZVAL", varid) - call NF95_GET_VAR(ncid, varid, zval) - 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 + call NF95_INQ_VARID(ncid_startphy, "AGESNO", varid) + call nf95_get_var(ncid_startphy, varid, agesno) + + call NF95_INQ_VARID(ncid_startphy, "ZMEA", varid) + call NF95_GET_VAR(ncid_startphy, varid, zmea) + + call NF95_INQ_VARID(ncid_startphy, "ZSTD", varid) + call NF95_GET_VAR(ncid_startphy, varid, zstd) + + call NF95_INQ_VARID(ncid_startphy, "ZSIG", varid) + call NF95_GET_VAR(ncid_startphy, varid, zsig) + + call NF95_INQ_VARID(ncid_startphy, "ZGAM", varid) + call NF95_GET_VAR(ncid_startphy, varid, zgam) + + call NF95_INQ_VARID(ncid_startphy, "ZTHE", varid) + call NF95_GET_VAR(ncid_startphy, varid, zthe) + + call NF95_INQ_VARID(ncid_startphy, "ZPIC", varid) + call NF95_GET_VAR(ncid_startphy, varid, zpic) + + call NF95_INQ_VARID(ncid_startphy, "ZVAL", varid) + call NF95_GET_VAR(ncid_startphy, varid, zval) ancien_ok = .TRUE. - ierr = NF90_INQ_VARID(ncid, "TANCIEN", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "TANCIEN", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, "phyetat0: Le champ est absent" PRINT *, "Depart legerement fausse. Mais je continue" ancien_ok = .FALSE. ELSE - call nf95_get_var(ncid, varid, t_ancien) + call nf95_get_var(ncid_startphy, varid, t_ancien) ENDIF - ierr = NF90_INQ_VARID(ncid, "QANCIEN", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "QANCIEN", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, "phyetat0: Le champ est absent" PRINT *, "Depart legerement fausse. Mais je continue" ancien_ok = .FALSE. ELSE - call nf95_get_var(ncid, varid, q_ancien) + call nf95_get_var(ncid_startphy, varid, q_ancien) ENDIF - ierr = NF90_INQ_VARID(ncid, "CLWCON", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "CLWCON", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, "phyetat0: Le champ CLWCON est absent" PRINT *, "Depart legerement fausse. Mais je continue" clwcon = 0. ELSE - call nf95_get_var(ncid, varid, clwcon(:, 1)) + call nf95_get_var(ncid_startphy, varid, clwcon(:, 1)) clwcon(:, 2:) = 0. ENDIF - xmin = 1.0E+20 - xmax = -1.0E+20 - xmin = MINval(clwcon) - xmax = MAXval(clwcon) - PRINT *, 'Eau liquide convective (ecart-type) clwcon:', xmin, xmax - ierr = NF90_INQ_VARID(ncid, "RNEBCON", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "RNEBCON", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, "phyetat0: Le champ RNEBCON est absent" PRINT *, "Depart legerement fausse. Mais je continue" rnebcon = 0. ELSE - call nf95_get_var(ncid, varid, rnebcon(:, 1)) + call nf95_get_var(ncid_startphy, varid, rnebcon(:, 1)) rnebcon(:, 2:) = 0. ENDIF - xmin = 1.0E+20 - xmax = -1.0E+20 - xmin = MINval(rnebcon) - xmax = MAXval(rnebcon) - PRINT *, 'Nebulosite convective (ecart-type) rnebcon:', xmin, xmax ! Lecture ratqs - ierr = NF90_INQ_VARID(ncid, "RATQS", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "RATQS", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, "phyetat0: Le champ est absent" PRINT *, "Depart legerement fausse. Mais je continue" ratqs = 0. ELSE - call nf95_get_var(ncid, varid, ratqs(:, 1)) + call nf95_get_var(ncid_startphy, varid, ratqs(:, 1)) ratqs(:, 2:) = 0. ENDIF - xmin = 1.0E+20 - xmax = -1.0E+20 - xmin = MINval(ratqs) - xmax = MAXval(ratqs) - PRINT *, '(ecart-type) ratqs:', xmin, xmax ! Lecture run_off_lic_0 - ierr = NF90_INQ_VARID(ncid, "RUNOFFLIC0", varid) + ierr = NF90_INQ_VARID(ncid_startphy, "RUNOFFLIC0", varid) IF (ierr /= NF90_NOERR) THEN PRINT *, "phyetat0: Le champ est absent" PRINT *, "Depart legerement fausse. Mais je continue" run_off_lic_0 = 0. ELSE - call nf95_get_var(ncid, varid, run_off_lic_0) + call nf95_get_var(ncid_startphy, varid, run_off_lic_0) ENDIF - xmin = 1.0E+20 - xmax = -1.0E+20 - xmin = MINval(run_off_lic_0) - xmax = MAXval(run_off_lic_0) - PRINT *, '(ecart-type) run_off_lic_0:', xmin, xmax - - call nf95_inq_varid(ncid, "sig1", varid) - call nf95_get_var(ncid, varid, sig1) - call nf95_inq_varid(ncid, "w01", varid) - call nf95_get_var(ncid, varid, w01) + call nf95_inq_varid(ncid_startphy, "sig1", varid) + call nf95_get_var(ncid_startphy, varid, sig1) - call NF95_CLOSE(ncid) + call nf95_inq_varid(ncid_startphy, "w01", varid) + call nf95_get_var(ncid_startphy, varid, w01) END SUBROUTINE phyetat0