Changes between Version 64 and Version 65 of Branches/MergeOCN/Goll


Ignore:
Timestamp:
2015-06-17T11:16:32+02:00 (9 years ago)
Author:
dgoll
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Branches/MergeOCN/Goll

    v64 v65  
    776776}}} 
    777777 
     778== 16. Negative biomass: lpj_gap.f90 == 
     779The 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}}} 
    778908= '''Mass conservation checks''' = 
    779909Mass closure given by: