condsurfs.f90 Source File


This file depends on

sourcefile~~condsurfs.f90~~EfferentGraph sourcefile~condsurfs.f90 condsurfs.f90 sourcefile~dimphy.f90 dimphy.f90 sourcefile~condsurfs.f90->sourcefile~dimphy.f90

Contents

Source Code


Source Code

SUBROUTINE condsurfs(jour, edgar, flag_dms, &
        lmt_so2h, lmt_so2b, lmt_so2bb, lmt_so2ba, &
        lmt_so2volc, lmt_altvolc, &
        lmt_dmsbio, lmt_h2sbio, lmt_dms, lmt_dmsconc)
   USE dimphy
   USE netcdf, ONLY: nf90_close, nf90_noerr, nf90_inq_varid, nf90_open, &
          nf90_nowrite, nf90_get_var
IMPLICIT none
  !
  ! Lire les conditions aux limites du modele pour la chimie.
  ! --------------------------------------------------------
  !

  !
  REAL :: lmt_so2h(klon), lmt_so2b(klon), lmt_so2bb(klon)
  REAL :: lmt_dmsbio(klon), lmt_h2sbio(klon), lmt_so2ba(klon)
  REAL :: lmt_so2volc(klon), lmt_altvolc(klon)
  REAL :: lmt_dms(klon), lmt_dmsconc(klon)
  LOGICAL :: edgar
  INTEGER :: flag_dms
  !
  INTEGER :: jour, i
  INTEGER :: ierr
  INTEGER :: nid,nvarid
  INTEGER :: debut(2),epais(2)
  !
  IF (jour.LT.0 .OR. jour.GT.(360-1)) THEN
     IF ((jour.GT.(360-1)) .AND. (jour.LE.367)) THEN
       jour=360-1
       print *,'JE: jour changed to jour= ',jour
     ELSE
       PRINT*,'Le jour demande n est pas correcte:', jour
       CALL ABORT
     ENDIF
  ENDIF
  !
  ierr = nf90_open ("limitsoufre.nc", nf90_nowrite, nid)
  if (ierr.ne.nf90_noerr) then
    write(6,*)' Pb d''ouverture du fichier limitsoufre.nc'
    write(6,*)' ierr = ', ierr
    call exit(1)
  endif
  !
  ! Tranche a lire:
  debut(1) = 1
  debut(2) = jour+1
  epais(1) = klon
  epais(2) = 1
  !
  ierr = nf90_inq_varid(nid, "VOLC", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_so2volc, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_so2volc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources so2 volcan'
     CALL exit(1)
  ENDIF
  !
  ierr = nf90_inq_varid(nid, "ALTI", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_altvolc, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_altvolc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les altitudes volcan'
     CALL exit(1)
  ENDIF
  !
  IF (edgar) THEN   !--EDGAR w/o ship and biomass burning
  !
  ierr = nf90_inq_varid(nid, "SO2ED95L", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_so2b, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_so2b, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources so2 edgar low'
     CALL exit(1)
  ENDIF
  !
  ierr = nf90_inq_varid(nid, "SO2ED95H", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_so2h, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_so2h, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources so2 edgar high'
     CALL exit(1)
  ENDIF
  !
  ELSE  !--GEIA
  !
  ierr = nf90_inq_varid(nid, "SO2H", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_so2h, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_so2h, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources so2 haut'
     CALL exit(1)
  ENDIF
  !
  ierr = nf90_inq_varid(nid, "SO2B", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_so2b, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_so2b, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources so2 bas'
     CALL exit(1)
  ENDIF
  !
  ENDIF  !--edgar
  !
  ierr = nf90_inq_varid(nid, "SO2BB", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_so2bb, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_so2bb, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources so2 bb'
     CALL exit(1)
  ENDIF
  !
  ierr = nf90_inq_varid(nid, "SO2BA", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_so2ba, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_so2ba, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources so2 bateau'
     CALL exit(1)
  ENDIF
  !
  ierr = nf90_inq_varid(nid, "DMSB", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_dmsbio, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsbio, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms bio'
     CALL exit(1)
  ENDIF
  !
  ierr = nf90_inq_varid(nid, "H2SB", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_h2sbio, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_h2sbio, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources h2s bio'
     CALL exit(1)
  ENDIF
  !
  IF (flag_dms.EQ.1) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSL", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_dms, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dms, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms liss'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.2) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSW", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid, lmt_dms, debut, epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dms, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms wann'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.3) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC1", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dmsconc old'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.4) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC2", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms conc 2'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.5) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC3", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms conc 3'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.6) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC4", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms conc 4'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.7) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC5", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms conc 5'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.8) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC6", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms conc 6'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.9) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC7", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms conc 7'
     CALL exit(1)
  ENDIF
  !
  ELSEIF (flag_dms.EQ.10) THEN
  !
  ierr = nf90_inq_varid(nid, "DMSC8", nvarid)
  !nhl #ifdef NC_DOUBLE
  ierr = nf90_get_var(nid, nvarid,lmt_dmsconc, debut,epais)
  !nhl #else
  !nhl       ierr = nf90_get_var(nid, nvarid, lmt_dmsconc, debut, epais)
  !nhl #endif
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources dms conc 8'
     CALL exit(1)
  ENDIF
  !
  ELSE
  !
     PRINT *,'choix non possible pour flag_dms'
     STOP
  !
  ENDIF
  !
  ierr = nf90_close(nid)
  !
  IF (flag_dms.LE.2) THEN
  DO i=1, klon
     lmt_dmsconc(i)=0.0
  ENDDO
  ELSE
  DO i=1, klon
     lmt_dms(i)=0.0
  ENDDO
  ENDIF
  !
  PRINT*, 'Sources SOUFRE lues pour jour: ', jour
  !
  RETURN
END SUBROUTINE condsurfs