SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/write_surf_atmn.F90
Go to the documentation of this file.
00001 !     ####################################
00002       SUBROUTINE WRITE_SURF_ATM_n(HPROGRAM,HWRITE,OLAND_USE)
00003 !     ####################################
00004 !
00005 !!****  *WRITE_SURF_ATM_n* - routine to write surface variables 
00006 !!                           in their respective files or in file
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    EXTERNAL
00015 !!    --------
00016 !!
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!
00024 !!
00025 !!    AUTHOR
00026 !!    ------
00027 !!      V. Masson   *Meteo France*      
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    01/2003
00032 !!      Modified    06/2007, P.LeMoigne: do not write pgd fields in
00033 !!                                       historical files
00034 !!      Modified    03/2009, B.Decharme: keys for arrange cover
00035 !!      Modified    04/2009, B.Decharme: write precipitation forcing into the restart file for ARPEGE/ALADIN run
00036 !       Modified    06/2009, B.Decharme: flag to desactivate writing of horizontal grid 
00037 !       Modified    08/2009, B.Decharme: BUDGETC for all tiles
00038 !       Modified    07/2011, B.Decharme: delete write pgd fields
00039 !       Modified    07/2011, B.Decharme: land_use key for writing semi-prognostic variables
00040 !       Modified    05/2012, B.Decharme: supress LPROVAR_TO_DIAG to write prognostic fields if user want
00041 !-------------------------------------------------------------------------------
00042 !
00043 !*       0.    DECLARATIONS
00044 !              ------------
00045 !
00046 USE MODD_SURF_CONF,       ONLY : CPROGNAME
00047 USE MODD_SURF_PAR,        ONLY : NVERSION, NBUGFIX
00048 USE MODD_WRITE_SURF_ATM,  ONLY : LNOWRITE_CANOPY
00049 USE MODD_SURF_ATM_n,      ONLY : NDIM_FULL, NDIM_SEA, NDIM_WATER, NDIM_TOWN, NDIM_NATURE, TTIME
00050 USE MODD_SURF_ATM_SSO_n,  ONLY : CROUGH
00051 USE MODD_DIAG_SURF_ATM_n, ONLY : TIME_BUDGETC,LSURF_BUDGETC,LSELECT  
00052 USE MODD_CH_SURF_n,       ONLY : LCH_EMIS, LRW_CH_EMIS, CCH_EMIS
00053 USE MODD_SURF_ATM_GRID_n, ONLY : CGRID, XGRID_PAR, XLAT, XLON, XMESH_SIZE
00054 !
00055 USE MODI_INIT_IO_SURF_n
00056 USE MODI_WRITE_SURF
00057 USE MODI_WRITE_SEA_n
00058 USE MODI_WRITE_INLAND_WATER_n
00059 USE MODI_WRITE_NATURE_n
00060 USE MODI_WRITE_TOWN_n
00061 USE MODI_END_IO_SURF_n
00062 USE MODI_WRITE_GRID
00063 !
00064 USE MODI_WRITESURF_ATM_CONF_n
00065 USE MODI_WRITESURF_SSO_CANOPY_n
00066 USE MODI_READWRITE_EMIS_FIELD_n
00067 USE MODI_WRITESURF_PRECIP_n
00068 USE MODI_WRITE_DIAG_CH_SNAP_n
00069 !
00070 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00071 USE PARKIND1  ,ONLY : JPRB
00072 !
00073 IMPLICIT NONE
00074 !
00075 !*       0.1   Declarations of arguments
00076 !              -------------------------
00077 !
00078  CHARACTER(LEN=6),    INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00079  CHARACTER(LEN=3),    INTENT(IN)  :: HWRITE    ! 'PREP' : does not write SBL XUNDEF fields
00080 !                                             ! 'ALL' : all fields are written
00081 LOGICAL,             INTENT(IN)  :: OLAND_USE !
00082 !
00083 !*       0.2   Declarations of local variables
00084 !              -------------------------------
00085 !
00086  CHARACTER(LEN=100) :: YCOMMENT
00087 INTEGER            :: IRESP
00088 LOGICAL            :: LSAVE_SELECT
00089 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00090 !-------------------------------------------------------------------------------
00091 !
00092 IF (LHOOK) CALL DR_HOOK('WRITE_SURF_ATM_N',0,ZHOOK_HANDLE)
00093 CPROGNAME = HPROGRAM
00094 !
00095 !*       1.     Configuration and cover fields:
00096 !               ------------------------------
00097 !
00098 !
00099 !         Initialisation for IO
00100 !
00101  CALL INIT_IO_SURF_n(HPROGRAM,'FULL  ','SURF  ','WRITE')
00102 !
00103 LSAVE_SELECT=LSELECT
00104 LSELECT     =.FALSE.
00105 !
00106 YCOMMENT='(-)'
00107  CALL WRITE_SURF(HPROGRAM,'VERSION',NVERSION,IRESP,YCOMMENT)
00108  CALL WRITE_SURF(HPROGRAM,'BUG    ',NBUGFIX ,IRESP,YCOMMENT)
00109  CALL WRITE_SURF(HPROGRAM,'STORAGETYPE',HWRITE,IRESP,YCOMMENT)
00110  CALL WRITE_SURF(HPROGRAM,'DIM_FULL  ',NDIM_FULL,IRESP,HCOMMENT=YCOMMENT)
00111 !
00112 YCOMMENT='s'
00113  CALL WRITE_SURF(HPROGRAM,'DTCUR',TTIME,IRESP,YCOMMENT)
00114 !
00115 LSELECT=LSAVE_SELECT
00116 !
00117  CALL WRITE_GRID(HPROGRAM,CGRID,XGRID_PAR,XLAT,XLON,XMESH_SIZE,IRESP)
00118 !
00119  CALL WRITESURF_ATM_CONF_n(HPROGRAM)
00120 !
00121  CALL WRITESURF_SSO_CANOPY_n(HPROGRAM,HWRITE,(CROUGH=='BE04' .AND. .NOT. LNOWRITE_CANOPY))
00122 !
00123  CALL WRITESURF_PRECIP_n(HPROGRAM)
00124 !
00125 YCOMMENT='flag for accumulated variables'
00126  CALL WRITE_SURF(HPROGRAM,'BUDC',LSURF_BUDGETC,IRESP,HCOMMENT=YCOMMENT)
00127 !
00128 IF (LSURF_BUDGETC) THEN
00129    YCOMMENT='time of beginning of accumulation'
00130    CALL WRITE_SURF(HPROGRAM,'TIME_BUDC',TIME_BUDGETC,IRESP,HCOMMENT=YCOMMENT)   
00131 END IF
00132 !  
00133 !         End of IO
00134 !
00135  CALL END_IO_SURF_n(HPROGRAM)
00136 !
00137 !
00138 !*       2.     Chemistry
00139 !               ---------
00140 !
00141 IF (LCH_EMIS) THEN
00142   IF (CCH_EMIS=='AGGR') THEN 
00143     IF (LRW_CH_EMIS) CALL READWRITE_EMIS_FIELD_n(HPROGRAM)
00144   ELSE IF (CCH_EMIS=='SNAP') THEN
00145     CALL WRITE_DIAG_CH_SNAP_n(HPROGRAM)
00146   END IF
00147 END IF
00148 !
00149 !
00150 !*       3.     Sea
00151 !               ---
00152 !
00153 IF (NDIM_SEA>0) CALL WRITE_SEA_n(HPROGRAM,HWRITE)
00154 !
00155 !
00156 !*       4.     Inland water
00157 !               ------------
00158 !
00159 IF (NDIM_WATER>0) CALL WRITE_INLAND_WATER_n(HPROGRAM,HWRITE)
00160 !
00161 !
00162 !*       5.     Vegetation scheme
00163 !               -----------------
00164 !
00165 IF (NDIM_NATURE>0) CALL WRITE_NATURE_n(HPROGRAM,HWRITE,OLAND_USE)
00166 !
00167 !
00168 !*       6.     Urban scheme
00169 !               ------------
00170 !
00171 IF (NDIM_TOWN>0) CALL WRITE_TOWN_n(HPROGRAM,HWRITE)
00172 IF (LHOOK) CALL DR_HOOK('WRITE_SURF_ATM_N',1,ZHOOK_HANDLE)
00173 !
00174 !-------------------------------------------------------------------------------
00175 !
00176 END SUBROUTINE WRITE_SURF_ATM_n