SURFEX v7.3
General documentation of Surfex
|
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