condsurfc_new.f90 Source File


This file depends on

sourcefile~~condsurfc_new.f90~~EfferentGraph sourcefile~condsurfc_new.f90 condsurfc_new.f90 sourcefile~mod_grid_phy_lmdz.f90 mod_grid_phy_lmdz.f90 sourcefile~condsurfc_new.f90->sourcefile~mod_grid_phy_lmdz.f90 sourcefile~mod_phys_lmdz_para.f90 mod_phys_lmdz_para.f90 sourcefile~condsurfc_new.f90->sourcefile~mod_phys_lmdz_para.f90 sourcefile~dimphy.f90 dimphy.f90 sourcefile~condsurfc_new.f90->sourcefile~dimphy.f90 sourcefile~mod_phys_lmdz_para.f90->sourcefile~mod_grid_phy_lmdz.f90 sourcefile~mod_phys_lmdz_mpi_data.f90 mod_phys_lmdz_mpi_data.f90 sourcefile~mod_phys_lmdz_para.f90->sourcefile~mod_phys_lmdz_mpi_data.f90 sourcefile~mod_phys_lmdz_omp_data.f90 mod_phys_lmdz_omp_data.F90 sourcefile~mod_phys_lmdz_para.f90->sourcefile~mod_phys_lmdz_omp_data.f90 sourcefile~mod_phys_lmdz_transfert_para.f90 mod_phys_lmdz_transfert_para.f90 sourcefile~mod_phys_lmdz_para.f90->sourcefile~mod_phys_lmdz_transfert_para.f90 sourcefile~print_control_mod.f90 print_control_mod.f90 sourcefile~mod_phys_lmdz_para.f90->sourcefile~print_control_mod.f90 sourcefile~mod_phys_lmdz_mpi_data.f90->sourcefile~print_control_mod.f90 sourcefile~lmdz_mpi.f90 lmdz_mpi.F90 sourcefile~mod_phys_lmdz_mpi_data.f90->sourcefile~lmdz_mpi.f90 sourcefile~lmdz_cppkeys_wrapper.f90 lmdz_cppkeys_wrapper.F90 sourcefile~mod_phys_lmdz_mpi_data.f90->sourcefile~lmdz_cppkeys_wrapper.f90 sourcefile~mod_phys_lmdz_omp_data.f90->sourcefile~dimphy.f90 sourcefile~mod_phys_lmdz_omp_data.f90->sourcefile~mod_phys_lmdz_mpi_data.f90 sourcefile~mod_phys_lmdz_omp_data.f90->sourcefile~print_control_mod.f90 sourcefile~mod_phys_lmdz_transfert_para.f90->sourcefile~mod_phys_lmdz_mpi_data.f90 sourcefile~mod_phys_lmdz_omp_transfert.f90 mod_phys_lmdz_omp_transfert.f90 sourcefile~mod_phys_lmdz_transfert_para.f90->sourcefile~mod_phys_lmdz_omp_transfert.f90 sourcefile~mod_phys_lmdz_mpi_transfert.f90 mod_phys_lmdz_mpi_transfert.f90 sourcefile~mod_phys_lmdz_transfert_para.f90->sourcefile~mod_phys_lmdz_mpi_transfert.f90 sourcefile~mod_phys_lmdz_omp_transfert.f90->sourcefile~mod_phys_lmdz_mpi_data.f90 sourcefile~mod_phys_lmdz_omp_transfert.f90->sourcefile~mod_phys_lmdz_omp_data.f90 sourcefile~mod_phys_lmdz_mpi_transfert.f90->sourcefile~mod_grid_phy_lmdz.f90 sourcefile~mod_phys_lmdz_mpi_transfert.f90->sourcefile~mod_phys_lmdz_mpi_data.f90 sourcefile~mod_phys_lmdz_mpi_transfert.f90->sourcefile~lmdz_mpi.f90

Contents

Source Code


Source Code

SUBROUTINE condsurfc_new(jour,lmt_bcff, lmt_bcnff, &
        lmt_bcbbl,lmt_bcbbh, lmt_bcba, &
        lmt_omff,lmt_omnff,lmt_ombbl,lmt_ombbh, &
        lmt_omnat, lmt_omba)
  USE mod_grid_phy_lmdz
  USE mod_phys_lmdz_para
  USE dimphy
  USE netcdf, ONLY: nf90_get_var, nf90_close, nf90_noerr, nf90_inq_varid, nf90_open, nf90_nowrite
IMPLICIT none
  !
  ! Lire les conditions aux limites du modele pour la chimie.
  ! --------------------------------------------------------
  !


  REAL :: lmt_bcff(klon), lmt_bcnff(klon), lmt_bcba(klon)
  REAL :: lmt_omff(klon), lmt_omnff(klon), lmt_ombb(klon)
  REAL :: lmt_bcbbl(klon), lmt_bcbbh(klon)
  REAL :: lmt_ombbl(klon), lmt_ombbh(klon)
  REAL :: lmt_omnat(klon), lmt_omba(klon)
  REAL :: lmt_terp(klon)
  !
  REAL :: lmt_bcff_glo(klon_glo), lmt_bcnff_glo(klon_glo)
  REAL :: lmt_bcba_glo(klon_glo)
  REAL :: lmt_omff_glo(klon_glo), lmt_omnff_glo(klon_glo)
  REAL :: lmt_ombb_glo(klon_glo)
  REAL :: lmt_bcbbl_glo(klon_glo), lmt_bcbbh_glo(klon_glo)
  REAL :: lmt_ombbl_glo(klon_glo), lmt_ombbh_glo(klon_glo)
  REAL :: lmt_omnat_glo(klon_glo), lmt_omba_glo(klon_glo)
  REAL :: lmt_terp_glo(klon_glo)
  !
  INTEGER :: jour, i
  INTEGER :: ierr
  INTEGER :: nid1,nvarid
  INTEGER :: debut(2),epais(2)
  !
  !  IF (jour.LT.0 .OR. jour.GT.(366-1)) THEN
  IF (jour.LT.0 .OR. jour.GT.366) THEN
     PRINT*,'Le jour demande n est pas correcte:', jour
     print *,'JE: FORCED TO CONTINUE (emissions have&
           & to be longer than 1 year!!!! )'
  !JE         CALL ABORT
  ENDIF

!$OMP MASTER
  IF (is_mpi_root .AND. is_omp_root) THEN
  !
  ! Tranche a lire:
  debut(1) = 1
  debut(2) = jour
  epais(1) = klon_glo
   ! epais(1) = klon
  epais(2) = 1
  !
  !=======================================================================
  !                    BC EMISSIONS
  !=======================================================================
  !
  ierr = nf90_open ("carbon_emissions.nc", nf90_nowrite, nid1)
  if (ierr.ne.nf90_noerr) then
    write(6,*)' Pb d''ouverture du fichier limitbc.nc'
    write(6,*)' ierr = ', ierr
    call exit(1)
  endif
  !
  ! BC emissions from fossil fuel combustion
  !
  ierr = nf90_inq_varid(nid1, "BCFF", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_bcff_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources BC'
     CALL exit(1)
  ENDIF
  ! !print *,'lmt_bcff = ',lmt_bcff
  ! !stop
  !
  ! BC emissions from non fossil fuel combustion
  !
  ierr = nf90_inq_varid(nid1, "BCNFF", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_bcnff_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources BC'
     CALL exit(1)
  ENDIF
  !
  ! Low BC emissions from biomass burning
  !
  ierr = nf90_inq_varid(nid1, "BCBBL", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_bcbbl_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources BC low'
     CALL exit(1)
  ENDIF
  !
  ! High BC emissions from biomass burning
  !
  ierr = nf90_inq_varid(nid1, "BCBBH", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_bcbbh_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources BC high'
     CALL exit(1)
  ENDIF
  !
  ! BC emissions from ship transport
  !
  ierr = nf90_inq_varid(nid1, "BCBA", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_bcba_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources BC'
     CALL exit(1)
  ENDIF
  !
  !=======================================================================
                     ! OM EMISSIONS
  !=======================================================================
  !

  !
  ! OM emissions from fossil fuel combustion
  !
  ierr = nf90_inq_varid(nid1, "OMFF", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_omff_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources OM'
     CALL exit(1)
  ENDIF
  !
  ! OM emissions from non fossil fuel combustion
  !
  ierr = nf90_inq_varid(nid1, "OMNFF", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_omnff_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources OM'
     CALL exit(1)
  ENDIF
  !
  ! Low OM emissions from biomass burning - low
  !
  ierr = nf90_inq_varid(nid1, "OMBBL", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_ombbl_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources OM low'
     CALL exit(1)
  ENDIF
  !
  ! High OM emissions from biomass burning - high
  !
  ierr = nf90_inq_varid(nid1, "OMBBH", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_ombbh_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources OM high'
     CALL exit(1)
  ENDIF
  !
  ! High OM emissions from ship
  !
  ierr = nf90_inq_varid(nid1, "OMBA", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_omba_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources OM ship'
     CALL exit(1)
  ENDIF
  !
  ! Natural Terpene emissions => Natural OM emissions
  !
  ierr = nf90_inq_varid(nid1, "TERP", nvarid)
  ierr = nf90_get_var(nid1, nvarid, &
        lmt_terp_glo, debut, epais)
  IF (ierr .NE. nf90_noerr) THEN
     PRINT*, 'Pb de lecture pour les sources Terpene'
     CALL exit(1)
  ENDIF
  !
  DO i=1,klon_glo
    lmt_omnat_glo(i)  = lmt_terp_glo(i)*0.11*1.4 !-- 11% Terpene is OC
  ENDDO

  ierr = nf90_close(nid1)
  !
  PRINT*, 'Carbon sources lues pour jour: ', jour
   ! lmt_bcff(klon)=0.0
   ! lmt_bcnff(klon)=0.0
   ! lmt_omff(klon)=0.0
   ! lmt_omnff(klon)=0.0
   ! lmt_ombb(klon)=0.0
   ! lmt_bcbbl(klon)=0.0
   ! lmt_bcbbh(klon)=0.0
   ! lmt_ombbl(klon)=0.0
   ! lmt_ombbh(klon)=0.0
   ! lmt_omnat(klon)=0.0
   ! lmt_omba(klon)=0.0
   ! lmt_terp(klon)=0.0


  ENDIF
!$OMP END MASTER
!$OMP BARRIER
  call scatter( lmt_bcff_glo   , lmt_bcff )
  call scatter( lmt_bcnff_glo  , lmt_bcnff )
  call scatter( lmt_bcbbl_glo  , lmt_bcbbl )
  call scatter( lmt_bcbbh_glo  , lmt_bcbbh )
  call scatter( lmt_bcba_glo   , lmt_bcba )
  call scatter( lmt_omff_glo   , lmt_omff )
  call scatter( lmt_omnff_glo  , lmt_omnff )
  call scatter( lmt_ombbl_glo  , lmt_ombbl )
  call scatter( lmt_ombbh_glo  , lmt_ombbh )
  call scatter( lmt_omba_glo   , lmt_omba )
  call scatter( lmt_terp_glo   , lmt_terp )
  call scatter( lmt_omnat_glo  , lmt_omnat )





  RETURN
END SUBROUTINE condsurfc_new