Changeset 7326 for branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate
- Timestamp:
- 2021-10-20T18:39:22+02:00 (3 years ago)
- Location:
- branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate.f90
r6369 r7326 646 646 contfrac, totfrac_nobio, clay, temp_air, & 647 647 lai, veget, veget_max, & 648 co2_to_bm_radia,deadleaf_cover, assim_param, temp_growth )648 deadleaf_cover, assim_param, temp_growth ) 649 649 650 650 … … 674 674 !! 0.2 Output variables 675 675 676 REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(out) :: co2_to_bm_radia !! virtual gpp flux between atmosphere and biosphere677 676 REAL(r_std),DIMENSION(kjpindex),INTENT(out) :: deadleaf_cover !! Fraction of soil covered by dead leaves (unitless) 678 677 REAL(r_std),DIMENSION(kjpindex,nvm,npco2),INTENT(out) :: assim_param !! min+max+opt temperatures (K) & vmax for photosynthesis … … 805 804 leaf_age, leaf_frac, & 806 805 senescence, when_growthinit, age, & 807 resp_hetero_d, resp_maint_d, resp_growth_d, co2_fire, co2_to_bm_dgvm, co2_to_bm_radia,&806 resp_hetero_d, resp_maint_d, resp_growth_d, co2_fire, co2_to_bm_dgvm, & 808 807 veget_lastlight, everywhere, need_adjacent, RIP_time, & 809 808 time_hum_min, hum_min_dormance, & … … 1196 1195 & rest_id_stom, hist_id_stom, hist_id_stom_IPCC, & 1197 1196 & co2_flux_out, fco2_lu_out, fco2_wh_out, fco2_ha_out, & 1198 & resp_maint, resp_hetero, resp_growth, co2_to_bm_radia,temp_growth)1197 & resp_maint, resp_hetero, resp_growth, temp_growth) 1199 1198 1200 1199 IMPLICIT NONE … … 1262 1261 REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(out) :: resp_hetero !! Heterotrophic respiration in 1263 1262 !! @tex $(gC m^{-2} dt_stomate^{-1})$ @endtex 1264 REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(out) :: co2_to_bm_radia !! Virtual gpp created for equilibrium of carbon mass1265 !! @tex $(gC m^{-2} dt_stomate^{-1})$ @endtex1266 1263 REAL(r_std),DIMENSION(kjpindex),INTENT(out) :: temp_growth !! Growth temperature (ðC) 1267 1264 !! Is equal to t2m_month … … 1602 1599 & veget_lastlight, everywhere, need_adjacent, RIP_time, & 1603 1600 & lai, rprof,npp_daily, turnover_daily, turnover_time,& 1604 & control_moist_inst, control_temp_inst, soilcarbon_input_ inst, &1601 & control_moist_inst, control_temp_inst, soilcarbon_input_daily, & 1605 1602 & co2_to_bm_dgvm, co2_fire, & 1606 1603 & resp_hetero_d, resp_hetero_litter_d, resp_hetero_soil_d, resp_maint_d, resp_growth_d, & … … 1771 1768 ! - (6) co2 emission from fire 1772 1769 ! co2_to_bm is not added as it is already encounted in gpp 1773 nep_daily(:,:)= gpp_daily(:,:) &1770 nep_daily(:,:)= gpp_daily(:,:) + co2_to_bm_dgvm(:,:) & 1774 1771 - resp_maint_d(:,:) - resp_growth_d(:,:) & 1775 1772 - resp_hetero_d(:,:) - co2_fire(:,:) … … 1780 1777 ! This variable will be used for the coupling to LMDZ for ESM configuration. 1781 1778 co2_flux(:,:) = (resp_hetero_d(:,:) + resp_maint_d(:,:) + resp_growth_d(:,:) & 1782 + co2_fire(:,:) - gpp_daily(:,:))*veget_cov_max1779 + co2_fire(:,:) - co2_to_bm_dgvm(:,:) - gpp_daily(:,:))*veget_cov_max 1783 1780 1784 1781 IF ( hist_id_stom_IPCC > 0 ) THEN … … 1875 1872 resp_maint(:,ibare_sechiba) = zero 1876 1873 resp_growth(:,:)= resp_growth_d(:,:)*veget_cov_max(:,:)*dt_sechiba/one_day 1877 co2_to_bm_radia(:,:)=co2_to_bm_dgvm(:,:)*veget_cov_max(:,:)*dt_sechiba/one_day1878 1874 resp_hetero(:,:) = resp_hetero_radia(:,:)*veget_cov_max(:,:) 1879 1875 … … 2017 2013 !_ ================================================================================================================================ 2018 2014 2019 SUBROUTINE stomate_finalize (kjit, kjpindex, index, clay, co2_to_bm_radia,assim_param)2015 SUBROUTINE stomate_finalize (kjit, kjpindex, index, clay, assim_param) 2020 2016 2021 2017 IMPLICIT NONE … … 2027 2023 INTEGER(i_std),DIMENSION(kjpindex),INTENT(in) :: index !! Indices of the terrestrial pixels only (unitless) 2028 2024 REAL(r_std),DIMENSION(kjpindex),INTENT(in) :: clay !! Clay fraction of soil (0-1, unitless) 2029 REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(in) :: co2_to_bm_radia !! virtual gpp flux between atmosphere and biosphere2030 2025 REAL(r_std),DIMENSION(kjpindex,nvm,npco2),INTENT(in) :: assim_param !! min+max+opt temperatures (K) & vmax for photosynthesis 2031 2026 … … 2132 2127 leaf_age, leaf_frac, & 2133 2128 senescence, when_growthinit, age, & 2134 resp_hetero_d, resp_maint_d, resp_growth_d, co2_fire, co2_to_bm_dgvm, co2_to_bm_radia,&2129 resp_hetero_d, resp_maint_d, resp_growth_d, co2_fire, co2_to_bm_dgvm, & 2135 2130 veget_lastlight, everywhere, need_adjacent, & 2136 2131 RIP_time, & -
branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate_io.f90
r6319 r7326 75 75 & turnover_longterm, gpp_week, biomass, resp_maint_part, & 76 76 & leaf_age, leaf_frac, senescence, when_growthinit, age, & 77 & resp_hetero, resp_maint, resp_growth, co2_fire, co2_to_bm_dgvm, co2_to_bm_radia,&77 & resp_hetero, resp_maint, resp_growth, co2_fire, co2_to_bm_dgvm, & 78 78 & veget_lastlight, everywhere, need_adjacent, RIP_time, & 79 79 & time_hum_min, hum_min_dormance, & … … 249 249 ! biomass uptaken (gC/(m**2 of total ground)/day) 250 250 REAL(r_std),DIMENSION(npts,nvm),INTENT(out) :: co2_to_bm_dgvm 251 ! biomass uptaken (gC/(m**2 of total ground)/dt_sechiba)252 REAL(r_std),DIMENSION(npts,nvm),INTENT(out) :: co2_to_bm_radia253 251 ! vegetation fractions (on ground) after last light competition 254 252 REAL(r_std),DIMENSION(npts,nvm),INTENT(out) :: veget_lastlight … … 941 939 IF (ALL(co2_to_bm_dgvm(:,:) == val_exp)) co2_to_bm_dgvm(:,:) = zero 942 940 943 co2_to_bm_radia(:,:) = val_exp944 var_name = 'co2_to_bm_radia'945 CALL restget_p (rest_id_stomate, var_name, nbp_glo, nvm , 1, itime, &946 & .TRUE., co2_to_bm_radia, 'gather', nbp_glo, index_g)947 IF (ALL(co2_to_bm_radia(:,:) == val_exp)) co2_to_bm_radia(:,:) = zero948 941 !- 949 942 ! 14 vegetation distribution after last light competition … … 1347 1340 & turnover_longterm, gpp_week, biomass, resp_maint_part, & 1348 1341 & leaf_age, leaf_frac, senescence, when_growthinit, age, & 1349 & resp_hetero, resp_maint, resp_growth, co2_fire, co2_to_bm_dgvm, co2_to_bm_radia,&1342 & resp_hetero, resp_maint, resp_growth, co2_fire, co2_to_bm_dgvm, & 1350 1343 & veget_lastlight, everywhere, need_adjacent, RIP_time, & 1351 1344 & time_hum_min, hum_min_dormance, & … … 1513 1506 ! biomass uptaken (gC/(m**2 of total ground)/day) 1514 1507 REAL(r_std),DIMENSION(npts,nvm),INTENT(in) :: co2_to_bm_dgvm 1515 ! biomass uptaken (gC/(m**2 of total ground)/dt_sechiba)1516 REAL(r_std),DIMENSION(npts,nvm),INTENT(in) :: co2_to_bm_radia1517 1508 ! vegetation fractions (on ground) after last light competition 1518 1509 REAL(r_std),DIMENSION(npts,nvm),INTENT(in) :: veget_lastlight … … 2024 2015 CALL restput_p (rest_id_stomate, var_name, nbp_glo, nvm, 1, itime, & 2025 2016 & co2_to_bm_dgvm, 'scatter', nbp_glo, index_g) 2026 !-2027 var_name = 'co2_to_bm_radia'2028 CALL restput_p (rest_id_stomate, var_name, nbp_glo, nvm, 1, itime, &2029 & co2_to_bm_radia, 'scatter', nbp_glo, index_g)2030 2017 !- 2031 2018 ! 14 vegetation distribution after last light competition -
branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate_lpj.f90
r6369 r7326 875 875 sum_cVegTree = zero 876 876 877 DO j= 2,nvm877 DO j=1,nvm 878 878 879 879 tot_litter_carb(:,j) = tot_litter_carb(:,j) + (litter(:,istructural,j,iabove,icarbon) + & … … 958 958 CALL xios_orchidee_send_field("LAI",lai) 959 959 CALL xios_orchidee_send_field("VEGET_COV_MAX",veget_cov_max) 960 CALL xios_orchidee_send_field("NPP_STOMATE",npp_daily )961 CALL xios_orchidee_send_field("GPP",gpp_daily )960 CALL xios_orchidee_send_field("NPP_STOMATE",npp_daily+co2_to_bm) 961 CALL xios_orchidee_send_field("GPP",gpp_daily+co2_to_bm) 962 962 CALL xios_orchidee_send_field("IND",ind) 963 963 CALL xios_orchidee_send_field("CN_IND",cn_ind) … … 1053 1053 1054 1054 ! Carbon fluxes transformed from gC/m2/d into kgC/m2/s 1055 CALL xios_orchidee_send_field("gpp_ipcc",SUM( gpp_daily*veget_cov_max,dim=2)/1e3/one_day)1055 CALL xios_orchidee_send_field("gpp_ipcc",SUM((gpp_daily+co2_to_bm)*veget_cov_max,dim=2)/1e3/one_day) 1056 1056 CALL xios_orchidee_send_field("ra",SUM((resp_maint+resp_growth)*veget_cov_max,dim=2)/1e3/one_day) 1057 1057 vartmp(:)=zero … … 1079 1079 CALL xios_orchidee_send_field("raTree",vartmp/1e3/one_day) 1080 1080 1081 CALL xios_orchidee_send_field("npp_ipcc",SUM(npp_daily*veget_cov_max,dim=2)/1e3/one_day) 1081 CALL xios_orchidee_send_field("npp_ipcc",SUM((npp_daily+co2_to_bm)*veget_cov_max,dim=2)/1e3/one_day) 1082 1082 1083 vartmp(:)=zero 1083 1084 DO j = 2, nvm 1084 1085 IF ( .NOT. is_tree(j) .AND. natural(j) ) THEN 1085 vartmp(:) = vartmp(:) + npp_daily(:,j)*veget_cov_max(:,j)1086 vartmp(:) = vartmp(:) +( npp_daily(:,j)+co2_to_bm(:,j))*veget_cov_max(:,j) 1086 1087 ENDIF 1087 1088 ENDDO … … 1090 1091 DO j = 2, nvm 1091 1092 IF ( (.NOT. is_tree(j)) .AND. (.NOT. natural(j)) ) THEN 1092 vartmp(:) = vartmp(:) + npp_daily(:,j)*veget_cov_max(:,j)1093 vartmp(:) = vartmp(:) + (npp_daily(:,j)+co2_to_bm(:,j))*veget_cov_max(:,j) 1093 1094 ENDIF 1094 1095 ENDDO … … 1098 1099 DO j = 2, nvm 1099 1100 IF ( is_tree(j) ) THEN 1100 vartmp(:) = vartmp(:) + npp_daily(:,j)*veget_cov_max(:,j)1101 vartmp(:) = vartmp(:) + (npp_daily(:,j)+co2_to_bm(:,j))*veget_cov_max(:,j) 1101 1102 ENDIF 1102 1103 ENDDO … … 1196 1197 CALL xios_orchidee_send_field("flulccatmlut",flulccatmlut) 1197 1198 1198 ! co2_to_bm is not added as it is already included in gpp 1199 CALL xios_orchidee_send_field("nbp",(SUM((gpp_daily-(resp_maint+resp_growth+resp_hetero)-co2_fire) * & 1199 CALL xios_orchidee_send_field("nbp",(SUM((gpp_daily+co2_to_bm-(resp_maint+resp_growth+resp_hetero)-co2_fire) * & 1200 1200 veget_cov_max,dim=2)-cflux_prod_total-cflux_prod_harvest_total-harvest_above)/1e3/one_day) 1201 1201 CALL xios_orchidee_send_field("fVegLitter",SUM((tot_bm_to_litter(:,:,icarbon) + tot_turnover(:,:,icarbon))*& … … 1267 1267 resp_hetero(:,j)*veget_cov_max(:,j)/1e3/one_day 1268 1268 npplut(:,id_psl) = npplut(:,id_psl) + & 1269 npp_daily(:,j)*veget_cov_max(:,j)/1e3/one_day1269 (npp_daily(:,j)+co2_to_bm(:,j))*veget_cov_max(:,j)/1e3/one_day 1270 1270 ELSE 1271 1271 clitterlut(:,id_crp) = clitterlut(:,id_crp) + tot_litter_carb(:,j)*veget_cov_max(:,j)/1e3 … … 1278 1278 resp_hetero(:,j)*veget_cov_max(:,j)/1e3/one_day 1279 1279 npplut(:,id_crp) = npplut(:,id_crp) + & 1280 npp_daily(:,j)*veget_cov_max(:,j)/1e3/one_day1280 (npp_daily(:,j)+co2_to_bm(:,j))*veget_cov_max(:,j)/1e3/one_day 1281 1281 END IF 1282 1282 END DO … … 1422 1422 veget_cov_max, npts*nvm, horipft_index) 1423 1423 CALL histwrite_p (hist_id_stomate, 'NPP', itime, & 1424 npp_daily , npts*nvm, horipft_index)1424 npp_daily+co2_to_bm, npts*nvm, horipft_index) 1425 1425 CALL histwrite_p (hist_id_stomate, 'GPP', itime, & 1426 gpp_daily , npts*nvm, horipft_index)1426 gpp_daily+co2_to_bm, npts*nvm, horipft_index) 1427 1427 CALL histwrite_p (hist_id_stomate, 'IND', itime, & 1428 1428 ind, npts*nvm, horipft_index) … … 1528 1528 CALL histwrite_p (hist_id_stomate_IPCC, "lai", itime, & 1529 1529 vartmp, npts, hori_index) 1530 vartmp(:)=SUM( gpp_daily*veget_cov_max,dim=2)/1e3/one_day1530 vartmp(:)=SUM((gpp_daily+co2_to_bm)*veget_cov_max,dim=2)/1e3/one_day 1531 1531 CALL histwrite_p (hist_id_stomate_IPCC, "gpp", itime, & 1532 1532 vartmp, npts, hori_index) … … 1534 1534 CALL histwrite_p (hist_id_stomate_IPCC, "ra", itime, & 1535 1535 vartmp, npts, hori_index) 1536 vartmp(:)=SUM( npp_daily*veget_cov_max,dim=2)/1e3/one_day1536 vartmp(:)=SUM((npp_daily+co2_to_bm)*veget_cov_max,dim=2)/1e3/one_day 1537 1537 CALL histwrite_p (hist_id_stomate_IPCC, "npp", itime, & 1538 1538 vartmp, npts, hori_index) … … 1553 1553 vartmp, npts, hori_index) 1554 1554 ! co2_to_bm is not added as it is already included in gpp 1555 vartmp(:)=(SUM((gpp_daily -(resp_maint+resp_growth+resp_hetero)-co2_fire) &1555 vartmp(:)=(SUM((gpp_daily+co2_to_bm-(resp_maint+resp_growth+resp_hetero)-co2_fire) & 1556 1556 & *veget_cov_max,dim=2)-cflux_prod_total-cflux_prod_harvest_total-harvest_above)/1e3/one_day 1557 1557 CALL histwrite_p (hist_id_stomate_IPCC, "nbp", itime, &
Note: See TracChangeset
for help on using the changeset viewer.