|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ##################################################### 00002 ! SUBROUTINE SOILEMISNO_n(PSW_FORBIO, PUA, PVA, KSV, HSV, PFLUX) 00003 SUBROUTINE SOILEMISNO_n(PUA, PVA) 00004 ! ##################################################### 00005 !! 00006 !!****** *SOILEMISNO* 00007 !! 00008 !! 00009 !! PURPOSE 00010 !! ------- 00011 ! 00012 ! Calculates NO emissions from soil 00013 ! plus estimation of Canopy Reduction Factor 00014 !! 00015 !! METHOD 00016 !! ------ 00017 ! Parameterizes NO fluxes function of temperature and soil moisture and other soil parameters, 00018 ! Development from a neural network algorithm. 00019 00020 !! EXTERNAL 00021 !! -------- 00022 !! none 00023 !! 00024 !! IMPLICIT ARGUMENTS 00025 !! ------------------ 00026 !! MODD_EMIS_NOX 00027 !! 00028 !! REFERENCE 00029 !! --------- 00030 !! 00031 !! Parameterization from neural network 00032 !! 00033 !! Input data : wind speed, deep soil temperature, surface soil temperature, surface WFPS, 00034 !! fertilisation rate, pH, sand percentage 00035 !! Delon et al. (2007) Tellus B 00036 !! 00037 !! AUTHOR 00038 !! ------ 00039 !! 00040 !! C. Delon * LA * 00041 !! 00042 !! MODIFICATIONS 00043 !! ------------- 00044 !! 00045 00046 ! 00047 !-------------------------------------------------------------------------- 00048 ! 00049 ! 0. DECLARATIONS 00050 ! ------------ 00051 ! 00052 USE MODD_EMIS_NOX 00053 USE MODD_ISBA_n, ONLY : XSAND, XTG, XWG, XLAI, XPH, XFERT 00054 USE MODD_GR_BIOG_n, ONLY : XNOFLUX 00055 USE MODD_CSTS, ONLY : XAVOGADRO 00056 !USE MODD_CH_ISBA_n, ONLY : NSV_CHSBEG, NSV_CHSEND, NBEQ, CSV 00057 !USE MODD_SURF_PAR, ONLY : XUNDEF 00058 ! 00059 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00060 USE PARKIND1 ,ONLY : JPRB 00061 ! 00062 IMPLICIT NONE 00063 ! 00064 ! 0.1 Declaration of arguments 00065 ! 00066 ! 00067 !REAL, DIMENSION(:,:), INTENT(IN) :: PSW_FORBIO 00068 REAL, DIMENSION(:), INTENT(IN) :: PUA ! wind module 00069 REAL, DIMENSION(:), INTENT(IN) :: PVA 00070 !INTEGER, INTENT(IN) :: KSV ! number of scalars 00071 !CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! chemical species name 00072 !REAL, DIMENSION(:,:), INTENT(INOUT) :: PFLUX ! NO flux from soil 00073 ! control switch for the first call 00074 INTEGER :: JI ! index 00075 INTEGER :: JSV 00076 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 00077 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 00078 ! Local variables: 00079 ! 00080 REAL, DIMENSION(SIZE(PUA,1)) :: ZCRF ! Canopy Reduction Factor 00081 ! 00082 REAL, DIMENSION(SIZE(PUA,1)) :: ZTG_D ! Deep soil temperature in °C 00083 REAL, DIMENSION(SIZE(PUA,1)) :: ZTG_S ! Surface soil temperature in °C 00084 REAL, DIMENSION(SIZE(PUA,1)) :: ZWFPS_S ! Water filled pore space at surface 00085 REAL, DIMENSION(SIZE(PUA,1)) :: ZSAND ! % of sand at surface (0-100) 00086 REAL, DIMENSION(SIZE(PUA,1)) :: ZWIND ! wind speed 00087 REAL, DIMENSION(SIZE(PUA,1)) :: ZFWORK 00088 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_WIND ! Normalized wind speed 00089 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_ZTG_D ! Normalized deep soil temperature 00090 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_ZTG_S ! Normalized surface soil temperature 00091 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_ZWFPS_S ! Normalized WFPS at surface 00092 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_FERT ! Normalized fertilisation rate (Nitrogen Unity) 00093 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_PH ! Normalized pH value 00094 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_ZSAND ! Normalized sand content (%) 00095 REAL, DIMENSION(SIZE(PUA,1)) :: ZN_Y ! Normalized NO flux 00096 ! 00097 REAL, DIMENSION(SIZE(PUA,1),3) :: ZS ! normalized sum 00098 ! 00099 CHARACTER(LEN=2) :: TEST_CRF ! 'OK' if VEG<60% (i.e. soils with sparse vegetation) 00100 ! 00101 INTEGER :: J 00102 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00103 !============================================================================= 00104 IF (LHOOK) CALL DR_HOOK('SOILEMISNO_n',0,ZHOOK_HANDLE) 00105 ! 00106 IF (.NOT.ASSOCIATED(XNOFLUX)) ALLOCATE(XNOFLUX(SIZE(PUA,1))) 00107 ! 00108 ! Calculation of WFPS 00109 ! coefficients obtenus a partir des donnees Grignon+Hombori+Escompte(0.536 0.4 0.43) 00110 ZWFPS_S(:) = (XWG(:,1,1) / 0.45) * 100. 00111 ! Change unity of temperatures from Kelvin to Celsius 00112 ZTG_D(:) = XTG(:,2,1) - 273.15 00113 ZTG_S(:) = XTG(:,1,1) - 273.15 00114 ! Change sand fraction into sand percentage 00115 ZSAND(:) = XSAND(:,1) * 100. 00116 ! Calculate wind module 00117 ZWIND(:) = SQRT( PUA(:)**2 + PVA(:)**2 ) 00118 ! 00119 ! Calculation of NO flux from soil 00120 !------------------------------------ 00121 ! 1- Normalized centered entries 00122 ! 00123 ZN_ZTG_S(:) = XCOEF_TG_S(1) + XCOEF_TG_S(2) * ZTG_S(:) 00124 ZN_ZWFPS_S(:) = XCOEF_WFPS_S(1) + XCOEF_WFPS_S(2) * ZWFPS_S(:) 00125 ZN_ZTG_D(:) = XCOEF_TG_D(1) + XCOEF_TG_D(2) * ZTG_D(:) 00126 ZN_FERT(:) = XCOEF_FERT(1) + XCOEF_FERT(2) * XFERT(:) 00127 ZN_ZSAND(:) = XCOEF_SAND(1) + XCOEF_SAND(2) * ZSAND(:) 00128 ZN_PH(:) = XCOEF_PH(1) + XCOEF_PH(2) * XPH(:) 00129 ZN_WIND(:) = XCOEF_WIND(1) + XCOEF_WIND(2) * ZWIND(:) 00130 ! 00131 ! 2- weighted sums 00132 ! 00133 DO J=1,3 00134 ZS(:,J) = XWGT_0(J) + XWGT_TG_S(J) * ZN_ZTG_S(:) & 00135 + XWGT_WFPS_S(J) * ZN_ZWFPS_S(:) + XWGT_TG_D(J) * ZN_ZTG_D(:) & 00136 + XWGT_FERT(J) * ZN_FERT(:) + XWGT_SAND(J) * ZN_ZSAND(:) & 00137 + XWGT_PH(J) * ZN_PH(:) + XWGT_WIND(J) * ZN_WIND(:) 00138 ENDDO 00139 ! 00140 ! 3- Hyperbolic tangent calculation 00141 ! 00142 ZN_Y(:) = XWGT_TOT(1) + XWGT_TOT(2)*TANH(ZS(:,1)) + XWGT_TOT(3)*TANH(ZS(:,2)) + XWGT_TOT(4)*TANH(ZS(:,3)) 00143 ! 00144 ! 4- Flux calculation 00145 ! If pH> 6, pulse effect, amplitude coefficient is maximum. 00146 ! If pH < 6, amplitude coefficient is reduced to avoid strong emissions 00147 WHERE (XPH(:) .GE. 6.0) 00148 XNOFLUX(:) = XCOEF_NO0 + XCOEF_NO1_s*ZN_Y(:) 00149 ELSEWHERE 00150 XNOFLUX(:) = XCOEF_NO0 + XCOEF_NO1_l*ZN_Y(:) 00151 ENDWHERE 00152 ! 00153 !PRINT*,'flux de NO en gN/ha/d = ',XNOFLUX(:) 00154 ! 00155 ! 5- Flag to avoid negative fluxes. 00156 WHERE (XNOFLUX(:).LT. 0.) XNOFLUX(:)=0. 00157 ! PRINT*,'!!!!!! Attention flux de NO negatifs !!!!!',XNOFLUX(JI) 00158 ! 00159 ! 6- Changing units from gN/ha/d to molecules/m2/s 00160 ! 1 ha=10000 m2, 1d=86400s, 1mole(NO)=30g, 1mole=Avogadro molec (6.022E23). 00161 ! 1mole(N) =14g 00162 XNOFLUX(:) = XNOFLUX(:)*XAVOGADRO/(1.0E4*8.64E4*14) 00163 ! 00164 !PRINT*,'flux de NO en molec/cm2/s = ',XNOFLUX(JI) 00165 ! 00166 ! 7- Reduction du flux dans la canopee 00167 ! WHERE (XLAI(:,1)/=XUNDEF) 00168 ! ZCRF(:) = -0.0917*XLAI(:,1) + 0.9429 00169 WHERE (XLAI(:,1) > 1.9 .AND. XLAI(:,1) < 5.) 00170 ZCRF(:) = 0.5 00171 ELSEWHERE (XLAI(:,1) > 5.) 00172 ZCRF(:) = 0.2 00173 ELSEWHERE 00174 ZCRF(:) = 1. 00175 ENDWHERE 00176 ! PRINT*,'LAI, CRF', XLAI(:), ZCRF(:) 00177 XNOFLUX(:) = XNOFLUX(:)*ZCRF(:) 00178 ! PRINT*,'flux de NO en molec/m2/s apres CRF = ',XNOFLUX(:) 00179 ! 00180 ! 8- Introduction du Flux de NO final dans la chimie apres reduction par le CRF (avec MesoNH chimie) 00181 ! IF (NBEQ>0) THEN 00182 ! DO JSV=NSV_CHSBEG,NSV_CHSEND 00183 ! IF (CSV(JSV) == "NO") THEN 00184 ! PFLUX(:,JSV) = PFLUX(:,JSV) + XNOFLUX(:) 00185 ! ENDIF 00186 ! END DO 00187 ! ELSE 00188 ! PFLUX(:,1) = PFLUX(:,1) + XNOFLUX(:) 00189 ! ENDIF 00190 ! 00191 IF (LHOOK) CALL DR_HOOK('SOILEMISNO_n',1,ZHOOK_HANDLE) 00192 ! 00193 END SUBROUTINE SOILEMISNO_n
1.8.0