| 778 | == 16. Negative biomass: lpj_gap.f90 == |
| 779 | The machine precision can lead to negative biomass pools. Thus I introduce a MAX(,0): |
| 780 | {{{ |
| 781 | ! remove the number of individuals that died |
| 782 | circ_class_n(ipts,ivm,icir) = circ_class_n(ipts,ivm,icir) - circ_class_kill(ipts,ivm,iclear,icir) |
| 783 | |
| 784 | ! remove the dead biomass |
| 785 | ! DSGdebug_17: ensure biomass doesn't get negative due to |
| 786 | ! machine precision |
| 787 | !DSGdebug_17 biomass(ipts,ivm,:,:) = biomass(ipts,ivm,:,:) - & |
| 788 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,:,:) * circ_class_kill(ipts,ivm,iclear,icir) |
| 789 | biomass(ipts,ivm,:,:) = MAX(biomass(ipts,ivm,:,:) - & |
| 790 | circ_class_biomass(ipts,ivm,icir,:,:) * circ_class_kill(ipts,ivm,iclear,icir),zero) |
| 791 | !DSGdebug_17 |
| 792 | |
| 793 | }}} |
| 794 | [...] |
| 795 | {{{ |
| 796 | ! remove the number of individuals that died |
| 797 | circ_class_n(ipts,ivm,icir) = circ_class_n(ipts,ivm,icir) - circ_class_kill(ipts,ivm,ithin,icir) |
| 798 | |
| 799 | ! remove the dead biomass |
| 800 | ! DSGdebug_17: ensure biomass doesn't get negative due to |
| 801 | ! machine precision |
| 802 | !DSGdebug_17 biomass(ipts,ivm,:,:) = biomass(ipts,ivm,:,:) - & |
| 803 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,:,:) * circ_class_kill(ipts,ivm,iclear,icir) |
| 804 | biomass(ipts,ivm,:,:) = MAX(biomass(ipts,ivm,:,:) - & |
| 805 | circ_class_biomass(ipts,ivm,icir,:,:) * circ_class_kill(ipts,ivm,iclear,icir),zero) |
| 806 | !DSGdebug_17 |
| 807 | |
| 808 | ! adjust the number of individuals |
| 809 | ind(ipts,ivm)=ind(ipts,ivm)-circ_class_kill(ipts,ivm,ithin,icir) |
| 810 | |
| 811 | ENDDO |
| 812 | |
| 813 | ! thinning trees generally avoids natural mortality and self-thinning, so let's remove all |
| 814 | ! thinned tr |
| 815 | }}} |
| 816 | [...] |
| 817 | {{{ |
| 818 | ! remove the dead biomass |
| 819 | ! DSGdebug_17: ensure biomass doesn't get negative due to |
| 820 | ! machine precision |
| 821 | !DSGdebug_17 biomass(ipts,ivm,ileaf,:) = biomass(ipts,ivm,ileaf,:) - & |
| 822 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,ileaf,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 823 | !DSGdebug_17 biomass(ipts,ivm,isapabove,:) = biomass(ipts,ivm,isapabove,:) - & |
| 824 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,isapabove,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 825 | !DSGdebug_17 biomass(ipts,ivm,isapbelow,:) = biomass(ipts,ivm,isapbelow,:) - & |
| 826 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,isapbelow,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 827 | !DSGdebug_17 biomass(ipts,ivm,iheartabove,:) = biomass(ipts,ivm,iheartabove,:) - & |
| 828 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,iheartabove,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 829 | !DSGdebug_17 biomass(ipts,ivm,iheartbelow,:) = biomass(ipts,ivm,iheartbelow,:) - & |
| 830 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,iheartbelow,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 831 | !DSGdebug_17 biomass(ipts,ivm,iroot,:) = biomass(ipts,ivm,iroot,:) - & |
| 832 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,iroot,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 833 | !DSGdebug_17 biomass(ipts,ivm,ifruit,:) = biomass(ipts,ivm,ifruit,:) - & |
| 834 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,ifruit,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 835 | !DSGdebug_17 biomass(ipts,ivm,icarbres,:) = biomass(ipts,ivm,icarbres,:) - & |
| 836 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,icarbres,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 837 | !DSGdebug_17 biomass(ipts,ivm,ilabile,:) = biomass(ipts,ivm,ilabile,:) - & |
| 838 | !DSGdebug_17 circ_class_biomass(ipts,ivm,icir,ilabile,:)*circ_class_kill(ipts,ivm,inatural,icir) |
| 839 | |
| 840 | biomass(ipts,ivm,ileaf,:) = MAX(biomass(ipts,ivm,ileaf,:) - & |
| 841 | circ_class_biomass(ipts,ivm,icir,ileaf,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 842 | biomass(ipts,ivm,isapabove,:) = MAX(biomass(ipts,ivm,isapabove,:) - & |
| 843 | circ_class_biomass(ipts,ivm,icir,isapabove,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 844 | biomass(ipts,ivm,isapbelow,:) = MAX(biomass(ipts,ivm,isapbelow,:) - & |
| 845 | circ_class_biomass(ipts,ivm,icir,isapbelow,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 846 | biomass(ipts,ivm,iheartabove,:) = MAX(biomass(ipts,ivm,iheartabove,:) - & |
| 847 | circ_class_biomass(ipts,ivm,icir,iheartabove,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 848 | biomass(ipts,ivm,iheartbelow,:) = MAX(biomass(ipts,ivm,iheartbelow,:) - & |
| 849 | circ_class_biomass(ipts,ivm,icir,iheartbelow,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 850 | biomass(ipts,ivm,iroot,:) = MAX(biomass(ipts,ivm,iroot,:) - & |
| 851 | circ_class_biomass(ipts,ivm,icir,iroot,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 852 | biomass(ipts,ivm,ifruit,:) = MAX(biomass(ipts,ivm,ifruit,:) - & |
| 853 | circ_class_biomass(ipts,ivm,icir,ifruit,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 854 | biomass(ipts,ivm,icarbres,:) = MAX(biomass(ipts,ivm,icarbres,:) - & |
| 855 | circ_class_biomass(ipts,ivm,icir,icarbres,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 856 | biomass(ipts,ivm,ilabile,:) = MAX(biomass(ipts,ivm,ilabile,:) - & |
| 857 | circ_class_biomass(ipts,ivm,icir,ilabile,:)*circ_class_kill(ipts,ivm,inatural,icir),zero) |
| 858 | !DSGdebug_17 |
| 859 | |
| 860 | }}} |
| 861 | [...] |
| 862 | {{{ |
| 863 | |
| 864 | ! remove the dead biomass |
| 865 | ! DSGdebug_17: ensure biomass doesn't get negative due to |
| 866 | ! machine precision |
| 867 | !DSGdebu_17 biomass(ipts,ivm,ileaf,:) = biomass(ipts,ivm,ileaf,:) - & |
| 868 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,ileaf,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 869 | !DSGdebu_17 biomass(ipts,ivm,isapabove,:) = biomass(ipts,ivm,isapabove,:) - & |
| 870 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,isapabove,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 871 | !DSGdebu_17 biomass(ipts,ivm,isapbelow,:) = biomass(ipts,ivm,isapbelow,:) - & |
| 872 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,isapbelow,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 873 | !DSGdebu_17 biomass(ipts,ivm,iheartabove,:) = biomass(ipts,ivm,iheartabove,:) - & |
| 874 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,iheartabove,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 875 | !DSGdebu_17 biomass(ipts,ivm,iheartbelow,:) = biomass(ipts,ivm,iheartbelow,:) - & |
| 876 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,iheartbelow,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 877 | !DSGdebu_17 biomass(ipts,ivm,iroot,:) = biomass(ipts,ivm,iroot,:) - & |
| 878 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,iroot,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 879 | !DSGdebu_17 biomass(ipts,ivm,ifruit,:) = biomass(ipts,ivm,ifruit,:) - & |
| 880 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,ifruit,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 881 | !DSGdebu_17 biomass(ipts,ivm,icarbres,:) = biomass(ipts,ivm,icarbres,:) - & |
| 882 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,icarbres,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 883 | !DSGdebu_17 biomass(ipts,ivm,ilabile,:) = biomass(ipts,ivm,ilabile,:) - & |
| 884 | !DSGdebu_17 circ_class_biomass(ipts,ivm,1,ilabile,:)*circ_class_kill(ipts,ivm,inatural,1) |
| 885 | |
| 886 | biomass(ipts,ivm,ileaf,:) = MAX(biomass(ipts,ivm,ileaf,:) - & |
| 887 | circ_class_biomass(ipts,ivm,1,ileaf,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 888 | biomass(ipts,ivm,isapabove,:) = MAX(biomass(ipts,ivm,isapabove,:) - & |
| 889 | circ_class_biomass(ipts,ivm,1,isapabove,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 890 | biomass(ipts,ivm,isapbelow,:) = MAX(biomass(ipts,ivm,isapbelow,:) - & |
| 891 | circ_class_biomass(ipts,ivm,1,isapbelow,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 892 | biomass(ipts,ivm,iheartabove,:) = MAX(biomass(ipts,ivm,iheartabove,:) - & |
| 893 | circ_class_biomass(ipts,ivm,1,iheartabove,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 894 | biomass(ipts,ivm,iheartbelow,:) = MAX(biomass(ipts,ivm,iheartbelow,:) - & |
| 895 | circ_class_biomass(ipts,ivm,1,iheartbelow,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 896 | biomass(ipts,ivm,iroot,:) = MAX(biomass(ipts,ivm,iroot,:) - & |
| 897 | circ_class_biomass(ipts,ivm,1,iroot,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 898 | biomass(ipts,ivm,ifruit,:) = MAX(biomass(ipts,ivm,ifruit,:) - & |
| 899 | circ_class_biomass(ipts,ivm,1,ifruit,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 900 | biomass(ipts,ivm,icarbres,:) = MAX(biomass(ipts,ivm,icarbres,:) - & |
| 901 | circ_class_biomass(ipts,ivm,1,icarbres,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 902 | biomass(ipts,ivm,ilabile,:) = MAX(biomass(ipts,ivm,ilabile,:) - & |
| 903 | circ_class_biomass(ipts,ivm,1,ilabile,:)*circ_class_kill(ipts,ivm,inatural,1),zero) |
| 904 | |
| 905 | |
| 906 | |
| 907 | }}} |