SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_ideal_flux.F90
Go to the documentation of this file.
00001 !     ############################################################
00002       SUBROUTINE INIT_IDEAL_FLUX(HPROGRAM,HINIT,                            &
00003                                    KI,KSV,KSW,                                &
00004                                    HSV,PCO2,PRHOA,                            &
00005                                    PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
00006                                    PEMIS,PTSRAD,                              &
00007                                    HTEST                                      )  
00008 !     ############################################################
00009 !
00010 !!****  *INIT_IDEAL_FLUX * - Prescription of the surface fluxes for the temperature, 
00011 !!    vapor, horizontal components of the wind and the scalar variables.   
00012 !!
00013 !!    PURPOSE
00014 !!    -------
00015 !       Give prescribed values of the surface fluxes for the potential 
00016 !     temperature, the vapor, the horizontal components of the wind and the 
00017 !     scalar variables. These fluxes are unsteady when a diurnal cycle 
00018 !     is taken into account.
00019 !
00020 !!**  METHOD
00021 !!    ------
00022 !!
00023 !!    EXTERNAL
00024 !!    --------
00025 !!
00026 !!
00027 !!    IMPLICIT ARGUMENTS
00028 !!    ------------------ 
00029 !!
00030 !!
00031 !!    REFERENCE
00032 !!    ---------
00033 !!      
00034 !!
00035 !!    AUTHOR
00036 !!    ------
00037 !!          J. Cuxart and J. Stein       * Meteo France *
00038 !!
00039 !!    MODIFICATIONS
00040 !!    -------------
00041 !!      Original    06/01/95 
00042 !!      V. Masson      02/03  split the routine in two (initialization here, and run)
00043 !!      R. Honnert     07/10  allows reading of data in namelist
00044 !-------------------------------------------------------------------------------
00045 !
00046 !*       0.    DECLARATIONS
00047 !              ------------
00048 !
00049 USE MODD_IDEAL_FLUX, ONLY : XSFTS, XALB, XEMIS
00050 USE MODN_IDEAL_FLUX
00051 USE MODD_READ_NAMELIST, ONLY : LNAM_READ
00052 
00053 USE MODI_DIAG_IDEAL_INIT_n
00054 USE MODD_DIAG_IDEAL_n, ONLY : N2M, LSURF_BUDGET, L2M_MIN_ZS, LRAD_BUDGET, LCOEF      , &
00055                                 LSURF_VARS, XDIAG_TSTEP, LSURF_BUDGETC, LRESET_BUDGETC   
00056 USE MODI_READ_IDEAL_CONF_n
00057 USE MODI_READ_DEFAULT_IDEAL_n
00058 USE MODI_PREP_CTRL_IDEAL
00059 USE MODI_DEFAULT_DIAG_IDEAL
00060 USE MODI_ABOR1_SFX
00061 USE MODI_GET_LUOUT
00062 !
00063 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00064 USE PARKIND1  ,ONLY : JPRB
00065 !
00066 IMPLICIT NONE
00067 !
00068 !*       0.1   declarations of arguments
00069 ! 
00070  CHARACTER(LEN=6),                 INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00071  CHARACTER(LEN=3),                 INTENT(IN)  :: HINIT     ! choice of fields to initialize
00072 INTEGER,                          INTENT(IN)  :: KI        ! number of points
00073 INTEGER,                          INTENT(IN)  :: KSV       ! number of scalars
00074 INTEGER,                          INTENT(IN)  :: KSW       ! number of short-wave spectral bands
00075  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN)  :: HSV       ! name of all scalar variables
00076 REAL,             DIMENSION(KI),  INTENT(IN)  :: PCO2      ! CO2 concentration (kg/m3)
00077 REAL,             DIMENSION(KI),  INTENT(IN)  :: PRHOA     ! air density
00078 REAL,             DIMENSION(KI),  INTENT(IN)  :: PZENITH   ! solar zenithal angle
00079 REAL,             DIMENSION(KI),  INTENT(IN)  :: PAZIM     ! solar azimuthal angle (rad from N, clock)
00080 REAL,             DIMENSION(KSW), INTENT(IN)  :: PSW_BANDS ! middle wavelength of each band
00081 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB  ! direct albedo for each band
00082 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each band
00083 REAL,             DIMENSION(KI),  INTENT(OUT) :: PEMIS     ! emissivity
00084 REAL,             DIMENSION(KI),  INTENT(OUT) :: PTSRAD    ! radiative temperature
00085 !
00086  CHARACTER(LEN=2),                 INTENT(IN)  :: HTEST       ! must be equal to 'OK'
00087 !
00088 !*       0.2   declarations of local variables
00089 !
00090 INTEGER           :: ISV    ! number of scalar variables
00091 INTEGER           :: ILUOUT ! unit of output listing fie
00092 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00093 !
00094 !-------------------------------------------------------------------------------
00095 !
00096 !         Initialisation for IO
00097 !
00098 IF (LHOOK) CALL DR_HOOK('INIT_IDEAL_FLUX',0,ZHOOK_HANDLE)
00099  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00100 !
00101 !----------------------------------------------------------------------------------
00102 IF (HTEST/='OK') THEN
00103   CALL ABOR1_SFX('INIT_IDEAL_FLUX: FATAL ERROR DURING ARGUMENT TRANSFER')
00104 END IF
00105 !
00106 !----------------------------------------------------------------------------------
00107 IF (LNAM_READ) THEN
00108  !
00109  !*       0.1    defaults
00110  !               --------
00111  !
00112  CALL DEFAULT_DIAG_IDEAL(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS,&
00113                          LSURF_BUDGETC,LRESET_BUDGETC,XDIAG_TSTEP           )  
00114 
00115 ENDIF
00116 !----------------------------------------------------------------------------------
00117 !
00118 !*       0.2    configuration
00119 !               -------------
00120 !
00121  CALL READ_DEFAULT_IDEAL_n(HPROGRAM)
00122  CALL READ_IDEAL_CONF_n(HPROGRAM)
00123 !
00124 ALLOCATE(XTIMEF_f (NFORCF+1))
00125 ALLOCATE(XSFTH_f  (NFORCF+1))
00126 ALLOCATE(XSFTQ_f  (NFORCF+1))
00127 ALLOCATE(XSFCO2_f (NFORCF+1))
00128 IF (CUSTARTYPE=='USTAR') ALLOCATE(XUSTAR_f (NFORCF+1))
00129 !
00130 ALLOCATE(XTIMET_t (NFORCT+1))
00131 ALLOCATE(XTSRAD_t (NFORCT+1))
00132 !
00133 XTIMEF_f(1:NFORCF) = XTIMEF(1:NFORCF)
00134 XSFTH_f (1:NFORCF) = XSFTH (1:NFORCF)
00135 XSFTQ_f (1:NFORCF) = XSFTQ (1:NFORCF)
00136 XSFCO2_f(1:NFORCF) = XSFCO2(1:NFORCF)
00137 IF (CUSTARTYPE=='USTAR') XUSTAR_f(1:NFORCF) = XUSTAR(1:NFORCF)
00138 !
00139 XTIMET_t(1:NFORCT) = XTIMET(1:NFORCT)
00140 XTSRAD_t(1:NFORCT) = XTSRAD(1:NFORCT)
00141 !
00142 XTIMEF_f(NFORCF+1) = XTIMEF_f(NFORCF)+1
00143 XSFTH_f (NFORCF+1) = XSFTH_f (NFORCF)
00144 XSFTQ_f (NFORCF+1) = XSFTQ_f (NFORCF)
00145 XSFCO2_f(NFORCF+1) = XSFCO2_f(NFORCF)
00146 IF (CUSTARTYPE=='USTAR') XUSTAR_f(NFORCF+1) = XUSTAR_f(NFORCF)
00147 !
00148 XTIMET_t(NFORCT+1) = XTIMET(NFORCT)+1
00149 XTSRAD_t(NFORCT+1) = XTSRAD(NFORCT)
00150 !
00151 !----------------------------------------------------------------------------------
00152 !
00153 !*       0.3    control
00154 !               -------
00155 !
00156 IF (HINIT=='PRE') THEN
00157    CALL PREP_CTRL_IDEAL(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS,&
00158                           ILUOUT,LSURF_BUDGETC)  
00159 ENDIF
00160 !
00161 !----------------------------------------------------------------------------------
00162 !
00163 !*       3.    HOURLY surface scalar mixing ratio fluxes (NFORCF+1 values per scalar from 00UTC to 24UTC)
00164 !              -----------------------------------------
00165 !
00166 ISV = SIZE(HSV)
00167 !
00168 IF(.NOT. ALLOCATED (XSFTS) )ALLOCATE(XSFTS(NFORCF+1,ISV))
00169 !
00170 !* unit: kg/m2/s
00171 !
00172 XSFTS = 0.
00173 !                                                          
00174 !-------------------------------------------------------------------------------
00175 !
00176 !*       8.    Radiative outputs
00177 !              -----------------
00178 !
00179 PTSRAD   = XTSRAD_t(1)
00180 !
00181 PDIR_ALB = XALB
00182 PSCA_ALB = XALB
00183 PEMIS    = XEMIS
00184 !
00185 !-------------------------------------------------------------------------------
00186 !
00187 !*       9.    Fluxes as diagnostics
00188 !              ---------------------
00189 !
00190  CALL DIAG_IDEAL_INIT_n(KI,KSW)
00191 IF (LHOOK) CALL DR_HOOK('INIT_IDEAL_FLUX',1,ZHOOK_HANDLE)
00192 !
00193 !-------------------------------------------------------------------------------
00194 !
00195 END SUBROUTINE INIT_IDEAL_FLUX