text:
Last update: January 1, 2023
If you're an anime fan, you may consider getting an anime tattoo. Anime tattoos are becoming increasingly popular, and there are so many different designs to choose from. How do you pick the perfect one? This blog post will discuss some factors when selecting an anime tattoo design. We'll also provide some examples of great tattoos for fans of anime!
What are anime tattoos?
Anime tattoos are simply tattoos that feature characters or designs from anime. This can include anything from your favorite anime show or movie to a more general method that incorporates elements of Japanese culture. Anime tattoos can be small and discreet or large and colorful. It all depends on your personal preference!
Some factors to consider when choosing an anime tattoo design
When choosing an anime tattoo design, there are a few factors to consider:
Size: How big do you want your tattoo to be? Anime tattoos can be small and delicate or large and bold. It all depends on your personal preference!
Location: Where on your body do you want to get the tattoo? This will likely be determined by the size of the tattoo. Smaller tattoos can be placed almost anywhere, while larger ones may be more suited to the back or chest.
Design: What kind of design do you want? Anime tattoos can feature any number of different designs, from your favorite anime character to a more general design that incorporates elements of Japanese culture. It all depends on your personal preference!
Color: Do you want your tattoo to be in color or black and white? Again, this is a matter of personal preference. Many people opt for colorful tattoos, which are more eye-catching. However, black and white tattoos can be just as beautiful!
What do anime tattoos mean?
Anime tattoos can mean various things, depending on the design. Generally speaking, they are a way to show your love for anime and Japanese culture. They can also be seen as a form of self-expression or simply as a way to make a statement. Whatever your tattoo's meaning, it will surely be unique to you!
Most popular anime tattoo placements and their meanings
Anime sleeve tattoo: This type of tattoo is usually large and covers the entire arm. It is often seen as a statement piece and can be pretty eye-catching.
Anime hand tattoo: A smaller tattoo that is placed on the hand. This type of tattoo is often more discreet and can be a great way to show your love for anime without being too in your face, like this Itachi eye tattoo below.
Anime arm tattoo: Similar to an anime sleeve tattoo, this type of tattoo covers the entire arm. However, it is usually smaller in size and can be more delicate in design.
Anime forearm tattoo: This type of tattoo is placed on the forearm and is often smaller in size. It can be a great way to show your love for anime without being too over the top.
Anime thigh tattoo: Thigh tattoos are becoming increasingly popular, and anime thigh tattoos are no exception! This type of tattoo is usually large and bold and can be a great way to show your love for anime.
Anime leg tattoo: Leg tattoos are similar to thigh tattoos but can be placed anywhere on the leg. They are often large and bold and can be a great way to show your love for anime.
Most popular anime tattoo ideas and their meanings
Bleach anime tattoo: Bleach is a popular anime show that follows the story of Ichigo Kurosaki, a young man who gains the ability to see ghosts after coming into contact with a Soul Reaper. The show is full of action and adventure, and its popularity has led to many fans getting tattoos inspired by the show.
Naruto anime tattoo: Naruto is another popular anime show that follows the story of a young ninja, Naruto Uzumaki, as he sets out on a journey to become the Hokage, the strongest ninja in his village. The show is full of action and adventure, and its popularity has led to many fans getting tattoos inspired by the show.
Sailor Moon anime tattoo: Sailor Moon is a classic anime show that follows the story of Usagi Tsukino, a young girl who is transformed into the titular Sailor Moon. The show is full of magic and adventure, and its popularity has led to many fans getting tattoos inspired by the show.
Dragon Ball Z anime tattoo: Dragon Ball Z is a classic anime show that follows the story of Goku, a young man who gains the ability to transform into a powerful fighter after coming into contact with a magical dragon ball. The show is full of action and adventure, and its popularity has led to many fans getting tattoos inspired by the show.
Phantom troupe tattoo anime: The Phantom Troupe is a popular anime show that follows the story of a group of thieves who travel the world stealing valuable items. The show is full of suspense and adventure, and its popularity has led to many fans getting tattoos inspired by the show.
Nana anime tattoo: Nana is a popular anime show that follows the story of two young women, Nana Osaki and Nana Komatsu, who move in together and become friends. The show is full of drama and romance, and its popularity has led to many fans getting tattoos inspired by the show.
Seven deadly sins anime tattoo: The Seven Deadly Sins is a popular anime show that follows the story of a group of knights tasked with stopping the king from enacting an authoritarian rule. The show is full of action and adventure, and its popularity has led to many fans getting tattoos inspired by the show.
General Breakdown Of Tattoo Pain Levels On Different Body Parts
Here is a breakdown of the different tattoo pain levels:
Low: This level of pain is generally described as a mild discomfort or tickling sensation. It is similar to the sensation of getting a light scratch or scrape.
Moderate: This level of pain is generally described as a moderate discomfort or aching sensation. It is similar to the sensation of getting a deep scratch or scrape or being pinched.
High: This level of pain is generally described as a strong discomfort or throbbing sensation. It is similar to the sensation of getting a burn or being stung by a bee.
It's important to note that pain tolerance is highly individual and can vary greatly from person to person. Some people may find certain body parts more or less painful than others, and the same body part can be more or less painful for different people. Additionally, the level of pain can be affected by factors such as the size and location of the tattoo, the skill of the tattoo artist, and the individual's own pain threshold.
Tattoo placement pain level chart
Pain Level
The forehead has few nerve endings, so it is not a particularly painful area.
The eyebrows have few nerve endings, so the pain level is relatively low.
The ear is a relatively thin and fleshy area, so the pain level is low.
The nostril is a small area with thin skin, so the pain level is low.
Low to Moderate
The lip has more nerve endings than some other areas, so it may be slightly more painful.
The cheek has a moderate amount of nerve endings, so it may be slightly more painful.
The neck has a moderate amount of nerve endings, so it may be slightly more painful.
Moderate to High
The chest has a high concentration of nerve endings, so it can be quite painful.
The abdomen has a high concentration of nerve endings, so it can be quite painful.
The back has a high concentration of nerve endings, so it can be quite painful.
The shoulders have a high concentration of nerve endings, so they can be quite painful.
The upper arms have a moderate to high concentration of nerve endings, so they can be somewhat painful.
The elbows have a high concentration of nerve endings, so they can be quite painful.
Forearms
The forearms have a moderate concentration of nerve endings, so they are not as painful as some other areas.
The hands have a high concentration of nerve endings, so they can be quite painful.
Lower Arms
The lower arms have a lower concentration of nerve endings, so they are not as painful as some other areas.
The wrists have a low concentration of nerve endings, so they are not very painful.
The lower back has a high concentration of nerve endings, so it can be quite painful.
The buttocks have a high concentration of nerve endings, so they can be quite painful.
The thighs have a high concentration of nerve endings, so they can be quite painful.
The knees have a high concentration of nerve endings, so they can be quite painful.
The calves have a low to moderate concentration of nerve endings, so they are not as painful as some other areas.
The ankles have a low concentration of nerve endings, so they are not very painful.
Tattoo aftercare tips
Before getting a tattoo:
Choose a reputable tattoo artist and parlor. Research the artist's portfolio and read reviews from previous clients.
Consult with the artist about the design and placement of the tattoo.
Make sure you are in good health. If you have any medical conditions or are taking any medications that may affect your ability to heal, be sure to let your tattoo artist know.
Consider using a numbing cream to reduce pain during the tattooing process. These creams contain a numbing agent (such as lidocaine) that can be applied to the skin before the tattoo is done. It's important to follow the instructions on the numbing cream and to only use it as directed.
Avoid alcohol, caffeine, and other substances that can thin your blood for at least 24 hours before getting a tattoo.
Eat a healthy meal before your tattoo session to ensure that your blood sugar is stable.
Wear loose, comfortable clothing that allows easy access to the area being tattooed.
After getting a tattoo:
Follow the aftercare instructions provided by your tattoo artist. These may include:
Keeping the tattoo clean and covered with a bandage for the first few hours after getting tattooed.
Washing the tattoo with lukewarm water and a mild soap (such as unscented, antimicrobial soap) and patting it dry with a clean towel.
Applying a thin layer of tattoo ointment or lotion (such as A&D or Aquaphor) to the tattoo and covering it with a clean bandage or wrap.
Repeating this process for the first few days, or until the tattoo has fully scabbed over.
Avoid soaking the tattoo in water for the first week, such as in a bath or pool.
Avoid picking or scratching at the scabs, as this can cause the tattoo to fade or become infected.
Avoid exposure to direct sunlight or tanning beds for at least 2-4 weeks.
If you experience any redness, swelling, or unusual discharge, contact your tattoo artist or a healthcare professional.
Overall, it's important to keep your tattoo clean and moisturized during the healing process to ensure that it heals properly and looks its best. Using a numbing cream can help reduce pain during the tattooing process, but it's important to use it as directed and to follow all aftercare instructions to ensure that your tattoo heals properly.
Anime tattoo history and origin
Tattoos have a long and varied history in Japan, with evidence of their use dating back to at least the Jomon period (14,500-300 BCE). Traditional Japanese tattoos, known as "irezumi," are typically done in the woodblock print style and feature motifs such as dragons, tigers, and other mythological creatures. These tattoos were often associated with the yakuza, a Japanese organized crime group, and were considered a symbol of defiance against mainstream society.
Anime tattoos, on the other hand, are tattoos featuring characters or designs inspired by Japanese animation and manga. These tattoos became popular outside Japan in the late 20th century as anime and manga gained a wider global audience.
It's important to note that while tattoos have a long history in Japan and are increasingly accepted in mainstream Japanese society, they are still stigmatized in many parts of the country and can make it difficult for those with visible tattoos to enter public baths, gyms, and other communal spaces. It's also worth noting that tattooing is illegal in Japan for anyone under 18.
How Anime tattoos are perceived in different cultures and countries
It's difficult to generalize how anime tattoos are perceived in different cultures and countries, as attitudes towards tattoos can vary widely even within a single society. That being said, tattoos of any kind are often associated with counterculture and rebellion, and this can be especially true of tattoos featuring anime characters or designs.
In some cultures and countries, tattoos are still stigmatized and are associated with criminal or deviant behavior. In these places, anime tattoos may be viewed negatively or as a sign of immaturity. In other places, tattoos are more widely accepted and may be seen as a form of self-expression or a way to pay tribute to one's interests and hobbies. In these cases, anime tattoos may be viewed more positively.
Ultimately, the perception of anime tattoos will depend on the individual and their own personal beliefs and experiences with tattoos. It's always a good idea to be mindful of cultural differences and respect others' opinions and feelings about tattoos.
@valentin.ink My first time incorporating anime into a tattoo 😅 #deathnote #anime ♬ original sound - Valentin Delgado
What are some of the most popular anime tattoo ideas?
Some popular anime tattoo ideas include Bleach, Naruto, Taboo, Sailor Moon, Dragon Ball Z, and The Phantom Troupe.
These tattoos often represent the show or character they are inspired by. For example, a Bleach tattoo may represent the show's protagonist, Ichigo Kurosaki, while a Naruto tattoo may represent the show's main character, Naruto Uzumaki.
Where can I get these tattoos?
These tattoos can be found at any tattoo parlor that offers anime-inspired designs. However, it is always best to do your research beforehand to ensure that you get a quality tattoo from a reputable artist.
Why do people get anime tattoos?
People often get anime tattoos because they are fans of the show or character that they are inspired by. For example, a fan of Bleach may get a tattoo of the show's protagonist, Ichigo Kurosaki. In contrast, a fan of Naruto may get a tattoo of the show's main character, Naruto Uzumaki. These tattoos often represent the show or character that they are inspired by.
What is an anime style of tattoo?
Anime style tattoo is a type of tattoo that is inspired by the famous Japanese cartoon style known as anime. These tattoos often feature bright colors and detailed designs and represent the show or character they are inspired by.
What is a kawaii tattoo?
A Kawaii tattoo is a type of anime-inspired tattoo that features adorable designs. These tattoos often represent the show or character that they are inspired by.
Watch A Full Time-Lapse Video Of An Anime Tattoo Done By A Pro:
250+ Anime Tattoo Designs And Ideas For All Anime Lovers
Anime tattoos are a popular choice for tattoo lovers all over the world. These tattoos often represent the show or character they are inspired by and can be found at any tattoo parlor that offers anime-inspired designs. However, it is always best to do your research beforehand to ensure that you get a quality tattoo from a reputable artist.


text:
Evaluating the Carbon Stock in Above-and Below-Ground Biomass in a Moist Central African Forest
Romeo Ekoungoulou, Shukui Niu, Jean Joël Loumeto, Suspense Averti Ifo, Yannick Enock Bocko, Fleury Edgard Koula Mikieleko, Eusebe Devalon Mpane Guiekisse, Hamidou Senou, Xiaodong L...
Applied Ecology and Environmental Sciences
Vol. 3, No. 2, 2015, pp 51-59. doi: 10.12691/aees-3-2-4 | Research Article
OPEN ACCESS PEER-REVIEWED
Romeo Ekoungoulou1, 2, Shukui Niu1, Jean Joël Loumeto2, Suspense Averti Ifo2, 3, Yannick Enock Bocko2, Fleury Edgard Koula Mikieleko2, Eusebe Devalon Mpane Guiekisse1, Hamidou Senou4, 5, Xiaodong Liu1,
1Laboratory of Ecological Planning and Management, College of Forestry, Beijing Forestry University, Beijing 100083, China
2Département de Biologie et Physiologie Végétales, Faculté des Sciences et Techniques, Université Marien Ngouabi, BP 69 Brazzaville, Republic of Congo
3Département des Sciences Naturelles, Ecole Normale Supérieure, Université Marien Ngouabi, BP 237 Brazzaville, Republic of Congo
4School of Biological Sciences and Biotechnology, Beijing Forestry University, Beijing 100083, China
5Institut Polytechnique Rural de Formation et de Recherche Appliquée (IPR/IFRA) de Katibougou, BP 06 Koulikoro,Mali
Conflict of Interests
The study aimed to estimate the carbon stocks of above-and below-ground biomass in Lesio-louna forest (Republic of Congo). The methodology of allometric equations was used to measure the carbon stocks of Lesio-louna moist forest. The research was done with 22 circular plots, each 1,256 m2. In the 22 plots, we made measurements on a total of 347 trees with 197 trees for the class of 10-30 cm diameter, 131 trees for the class of 30-60 cm diameter and 19 trees in the diameter class > 60 cm. The results shows that in the whole forest, the average carbon stock across the 22 plots studied was 168.601 t C ha-1 for aboveground biomass (AGB), or 81% and 39.55t C ha-1 for belowground biomass (BGB), or 19%. The total carbon stocks in all the biomass was 3,395 t C for aboveground biomass (AGB) and 909.689 t C for belowground biomass (BGB).This study indicates that the forests in the studied sites are an important carbon sink, and they can also play a key role in global climate change mitigation. Lesio-louna tropical forest has the capacity to trap vast amounts of carbon which would otherwise escape into the atmosphere as CO2, one of the worst greenhouse gases (GHGs) offenders.
Keywords: Carbon Stocks, Gallery Forest, Secondary Forest, Aboveground Biomass, Belowground Biomass, Lesio-louna forest
Normal Style
Romeo Ekoungoulou, Shukui Niu, Jean Joël Loumeto, Suspense Averti Ifo, Yannick Enock Bocko, Fleury Edgard Koula Mikieleko, Eusebe Devalon Mpane Guiekisse, Hamidou Senou, Xiaodong Liu. Evaluating the Carbon Stock in Above-and Below-Ground Biomass in a Moist Central African Forest. Applied Ecology and Environmental Sciences. Vol. 3, No. 2, 2015, pp 51-59. http://pubs.sciepub.com/aees/3/2/4
Ekoungoulou, Romeo, et al. "Evaluating the Carbon Stock in Above-and Below-Ground Biomass in a Moist Central African Forest." Applied Ecology and Environmental Sciences 3.2 (2015): 51-59.
Ekoungoulou, R. , Niu, S. , Loumeto, J. J. , Ifo, S. A. , Bocko, Y. E. , Mikieleko, F. E. K. , Guiekisse, E. D. M. , Senou, H. , & Liu, X. (2015). Evaluating the Carbon Stock in Above-and Below-Ground Biomass in a Moist Central African Forest. Applied Ecology and Environmental Sciences, 3(2), 51-59.
Ekoungoulou, Romeo, Shukui Niu, Jean Joël Loumeto, Suspense Averti Ifo, Yannick Enock Bocko, Fleury Edgard Koula Mikieleko, Eusebe Devalon Mpane Guiekisse, Hamidou Senou, and Xiaodong Liu. "Evaluating the Carbon Stock in Above-and Below-Ground Biomass in a Moist Central African Forest." Applied Ecology and Environmental Sciences 3, no. 2 (2015): 51-59.
In the context of climate change, special attention is given to carbon which is a major constituent of greenhouse gases (GHGs). Forests have a very important role for mitigating this phenomenon by photosynthesis [23, 27]. Globally, terrestrial ecosystems sequester annually 1.4 ± 0.7 P. g1C.yr-1, or 22.2% of the flux of fossil fuels [32]. Forests account for 48% of the total carbon storage capacity of worldwide terrestrial ecosystems [32, 52]. Trees, the major components of forests, absorb large amounts of atmospheric carbon dioxide (CO2) by photosynthesis, and forests return an almost equal amount to the atmosphere by auto-and heterotrophic respiration [36]. One of the environmental issues of global concern today is the increase of carbon dioxide in the atmosphere and its potential effect on climate.
However, a small fraction of carbon remaining in forests continuously accumulates in vegetation, detritus, and soil. Moreover, undisturbed forest ecosystems are important global carbon sinks [36]. In forests, there are five storages of carbon: the above-and below-ground biomass of trees, litter on the forest floor, dead woods, soils and long-life wood products [47]. The choice of measuring reserves depends on several factors, including expected results in the rate of change, its magnitude and direction, the availability and accuracy of methods to quantify the change, and the measuring costs. All reserves are expected to see a reduction in response to the human activities, thus, there is a need for these activities to be measured and monitored. The forest is a reservoir of carbon [26] because it has a good capacity to stock carbon from the atmosphere [33, 50]. The decision to evaluate wood products depends on whether the trees will be harvested or not. Activities related to forest management can be to analyze wood products [32, 36] because it often reduces the change in the active reserve of carbon; it is the same for an activity to keep the forest standing if the original activity was industrial forest production. Forests act as carbon reservoirs by storing large amounts of carbon in trees, under story vegetation [25], in the forest floor and soil [41, 42, 43]. The idea of paying forest users in the developing world to reforest has given the world an acronym with universal appeal - REDD, or Reduced Emissions from Deforestation and Forest Degradation. Implicitly at least, REDD (now REDD+ to include both avoided deforestation and enhancement of forest carbon stocks) promises a win-win solution for mitigating the effects of global warming [27]. REDD+ promises to help maintain standing forests and sequester carbon from the atmosphere while providing cash incentives and other benefits to compensate forest users, build livelihoods and reward indigenous and community groups for their stewardship role. Although it builds quite strongly up on decades of experience with forest conservation and development, REDD+ also conjures up the image of a radical initiative that challenges predatory business-as-usual practices [30].
Ecology is the main response of tropical forest ecosystems to natural or anthropogenic environmental changes [29, 37, 51]. Long-term forest inventories are most useful in order to evaluate the magnitude of carbon fluxes between aboveground forest ecosystems and the atmosphere [1, 16]. Guidelines have been published for setting up permanent plots, censuring trees correctly [11, 14], and for estimating aboveground biomass (AGB) stocks and changes from these datasets [7, 16, 28]. However, one of the large sources of uncertainty in all estimates of carbon stocks in tropical forests is the lack of standard models for converting tree measurements to aboveground biomass estimates [24, 30]. Here, we directly appraise a critical step in the plot-based biomass estimation procedure, namely the conversion of plot census data into estimates of aboveground biomass (AGB). Most important, approaches under the Kyoto Protocol may increase CO2 emissions from forestry by accelerating deforestation [28, 34]. Yet, reduced emissions from deforestation and forest degradation (REDD), and compensated reduction in deforestation has improved mechanisms to include avoided tropical deforestation under the Kyoto Protocol or its successor. Also, the national inventory approach may be an attractive alternative to consider. Both established and future international agreements rely particularly on forest carbon accounting and monitoring systems [36].
The use of allometric equations is a crucial step in estimating aboveground biomass (AGB), yet it is seldom directly tested [8, 15, 35]. Belowground biomass is estimated from aboveground biomass through allometric methods [41]. Because one hectare of tropical forest may shelter as many as 300 different tree species [44], one cannot use species-specific regression models, as in the temperate zone [9, 43]. Instead, mixed species tree biomass regression models must be used. Moreover, published regression models are usually based on a small number of directly harvested trees and include very few large diameter trees, thus not well representing the forest at large. This explains why two models constructed for the same forest may yield different aboveground biomass (AGB) estimates, a difference exacerbated for large trees, which imposes a great uncertainty on stand level biomass estimates [7, 17, 42]. Direct tree harvest data are difficult to acquire in the field, and few published studies are available. Therefore, it is often impossible to independently assess the quality of the model [4]. Tropical forests hold large stores of carbon [23, 31], yet uncertainty remains regarding their quantitative contribution to the global carbon cycle [6, 22]. One approach to quantifying carbon biomass stores consists in inferring changes from long-term forest inventory plots. Regression models are used to convert inventory data into an estimate of aboveground biomass [15]. The assessment of carbon stocks in this ecosystem is not yet satisfactorily known, but if it was, would enable countries with this heritage to access their carbon credit-another way to take advantage of the forest. Very little specific information is available in this field regarding the Republic of Congo.
The harvesting of timber from forests is a central part of the economy of tropical nations as is exemplified by the case of the Republic of Congo [12]. Monitoring of logging activities therefore serves as an important function [13]. The aims of this study are to estimate the carbon stocks of Lesio-louna tropical rainforest. The results of this study will be useful to the Republic of Congo's forest carbon quantification program. Within the carbon market, the result of this study on carbon stocks in Lesio-louna forest could allow the Republic of Congo to receive the carbon credit.
2.1. Study Area
The sites in which the experimental plots of this study were installed is located in the Lesio-louna protected area, found in the Teke-plateau (15°28′E, 03°16′S), around the Department of Pool in the Republic of Congo. Also, the Teke-plateau is a wide range of plateau starting from Republic of Gabon crossing Republic of Congo until Democratic Republic of Congo [20, 23]. Lesio-louna is around 160 km in north part from Brazzaville [21]. It occupies the Centre of the Republic of Congo and covers about 12,000 km2 [5]. The altitude varies between 600 and 800 m, and surrounded by a hilly area, occupies about 70,000 km2 [5, 22]. From a geographical point of view, in The Republic of Congo, Teke-plateau extend from the north of the city of Brazzaville and are limited to the east by the Congo River to the west by longitude 14°50'E, to the south by parallel 03°01'S latitude, the north by the parallel 03°17'S South latitude[5]. The annual precipitation is 1,500 to 2,000 mm [2-3][2].
The fieldwork was based on techniques using circular plots [13, 47, 52], each with a diameter of 40 m. The reason for choosing this more appropriate type of plot is that the real boundary of circular plots does not need to be marked [20, 21, 22]. We used a nested experimental design of study plots. Experience has shown that sample plots containing small sub-units of similar shape but of different sizes (i.e. nested plots) are advantageous economically and scientifically for most tree vegetation. The study retained 22 circular plots each separated by roughly 100 m. The study plots were permanent plots consisting of three concentric circles. The first circle is the smallest, with a radius of 6 m, to measure the trees with 10-30 cm diameter at breast height (DBH). The second is the intermediate circle, with a radius of 14 m, to measure the trees with 30-60 cm DBH. The third circle is the largest, with a radius of 20 m, to measure the trees >60 cm DBH.
Tree measurements were conducted on plots with a slope < 10°. Also, measurements were made solely on the trees DBH 10 cm and height 1.3 m [1, 28], and only these were marked with a nail and plastic label. We used the criteria of DBH 10 because the stand age of the forest in the study area was not particularly young. Also, Lesio-louna forest is the tropical moist forest. The stems less than 10 cm would normally be measured in fairly young forest.
The measurements were performed by taking into account the tree locations. For trees with obstacles, we had to add 30 cm to 1.3 m to the normal size measurements.
The description of the approach used to measure trees of the study was incorporated into the data collection to allow measurements to be made with precision and accuracy. The steps followed were:
An enumerator responsible for recording data was focused exclusively on measuring and marking trees. Registration took place at the center of the plot being measured. The enumerator also monitored those measuring trees and ensured no trees were omitted;
To prevent double counting or omission of trees, the measurement started from north and the first tree was labeled [18, 19, 20, 21]. Any measured tree would be immediately labeled with a permanent marker sign facing the center of the plot to allow the data enumerator to distinguish between measured and unmeasured trees;
Any tree of suitable size inside each nested plot had a numbered tag, preferably plastic, nailed to it.
To estimate the carbon stock in Lesio-louna forest, we used the method from [15] by measurement of the biomass. The reason for choosing the allometry method is according to the recommendation of REDD+ process, also to contribute in the mitigation of global climate change. The methodology used was the non-destructive method and the calculations were done by the allometric equations from [15] to calculate the aboveground biomass (AGB). The model from [41] was used to calculate the belowground biomass (BGB). The main parameters for the calculation were diameter at breast height (DBH) and wood density. In this model, the power-law relationship is parameterized by c=d=0. To estimate carbon, the biomass was divided by two to obtain the carbon for each plot [6, 14, 47]. Moreover, a carbon stock is typically derived from aboveground biomass by assuming that 50% of the biomass is made up carbon as asserted by [6]. The most accurate method for the estimation of biomass is through cutting of trees and weighing of their parts. This destructive method is often used to validate others, less invasive and costly methods, such as the estimation of carbon stock using non-destructive in-situ measurements. Total aboveground biomass of each tree in the plots was estimated using the following allometric equation:
Total tree height is not always available in field inventories, and it may sometimes be better not to include it in procedures of biomass estimation [15, 18]. A concave shaped relationship is observed when the logarithm of height, ln(H), is plotted against the logarithm of diameter, ln(DBH) [19]. This indicates a progressive departure from the ideal allometry during the trees ontogeny. A polynomial model relating ln(H) and ln(DBH) provides a reasonable generalization of the power-law model [19, 43]. Assuming such a polynomial relationship between ln(H) and ln(DBH) [48], it is straightforward to deduce the following mathematical equation:
For unidentified species, we applied the mean wood density for each plot, weighted by the number of trees from each species [39].
The general model for moist forest was chosen [15]:
The reason for choosing the model from [15] (Eq.3) is because it is developed for tropical moist forests and Lesio-louna area is a tropical moist forest. This pan-tropic model for tropical forests based on diameter at breast height (DBH) measurements and wood density was applied to our current data.
Wood density for each tree was provided by Global Wood Density Database from DRYAD (accessed on 28 December 2014 from http://datadryad.org/handle/10255/dryad.235).For example, one of the studied trees (Millettia laurentii De wild.) from plot1 in Lesio-louna's Inkou forest island(secondary forest) has a DBH of 40 cm. Then, 40 cm is well within the maximum DBH for this equation, which is reliable up to 148 cm [7].
Aboveground biomass (AGB) of this Millettia laurentii (Fabaceae) was 302.766 kg, or 0.302t. From [47], the follow equation is used to determine the estimation of carbon stock of the tree:
So, the carbon stock estimation of this tree was 0.151 t.
Next, to estimate the belowground biomass (BGB), the equation from [41] was used. The carbon stock of belowground biomass has been estimate from the belowground biomass as a carbon stock for belowground biomass is typically derived from belowground biomass by assuming that 50% of the belowground biomass is made up carbon. The equation developed by [41] for the moist forest is as follows:
So, BGBC= Belowground biomass carbon (t C ha-1)
The statistical analyses were performed using the statistical software SPSS version 18.0 and the statistical software Sigma Plot version 12.0.
Veiw figureFigures index
View larger figure in new window
Figure 1. Distribution of trees in the study area. Total number of trees in 22 plots of study sites (a) and total number of trees by diameter class of DBH (b)
Figure 2. Carbon stock of aboveground-and below-ground biomass (A) in the study sites (t C ha-1), and the frequency of carbon stock in aboveground biomass (AGB) and belowground biomass (BGB) for different studied plots (B)
Table 1. Structuring the study sites and distribution of the carbon stock in Lesio-louna forest
Veiw tableTables index
View table in a new window
This study was conducted using 22 circular plots each 1,256 m2 with 20 m radius / plot. All 22 plots studied were divided between 5 sites, including: Iboubikro, Ngoyili, Blue Lake Forest, Inkou Forest Island and Ngoyili (Table 1). In the 22 plots studied, 19 plots are in gallery forest and three plots in secondary forest. However, in the 22 plots, we made measurements on a total of 347 trees with 197 trees for the class of 10-30 cm diameter, 131 trees for the class of 30-60 cm diameter and 19 trees in the diameter class >60 cm (Figure 1). Most calculations determine the values for biomass reserve data, except for soil, which usually measures the carbon directly [15].
Values to extrapolate up to the values of the plots per hectare required an expansion factor. These expansion factors indicate which surface is represented by each plot or sample as observed by [20]. This standardization is needed to easily interpret the results and also make comparisons with other studies.
This study shows that the species density is higher in the gallery forest compared to the secondary forest. Table 1 shows that all 22 plots are the same size (1,256 m2) and the radius of each plot is also the same size in all plots. However, plot10 is the most dominant in terms of number of trees, as it contains 30 trees, and plot16 contains only a few species (9 trees). The total carbon stock in all the biomass was 3,395 t C for aboveground biomass (AGB) and 909.689 t C for belowground biomass (BGB). Moreover, in this forest, the carbon stock was more substantial in aboveground biomass compared to belowground biomass (3,395t C and 909.689t C respectively). In this forest ecosystem, plot10 had a higher carbon stock of aboveground biomass (363.899t C ha-1), closely followed by plot11, with a carbon stock of aboveground biomass (AGB) measuring 293.642t Cha-1, as shown in Table 1. The lower carbon stock of aboveground biomass (AGB) is in plot16 which was measured at 51.01t C ha-1. Also, in this forest ecosystem, the average aboveground biomass carbon stock was 168.601t Cha-1, or 81% (Figure 2). In contrast, the average of belowground biomass carbon stock was 39.55t C ha-1, or 19%. The frequency distribution of aboveground biomass was higher compared to belowground biomass in the study area (Figure 6). We found that the carbon stock of aboveground biomass (AGB) is high in relation to carbon stock of belowground biomass (BGB). Figure 2 shows that in this study, the carbon stock estimation of AGB (168.601 t Cha-1) is higher than the carbon stock estimation of BGB (39.55 t C ha-1).
We have presented the comparison between the carbon stock of secondary forest and the gallery forest in Figure 3. In the gallery forest, we used random plots P14, P15 and P16 (Table 1). The scientific reason to choice P14, P15, and P16 as representative of the gallery forest is because these three plots have an area state similar with most of plots from the secondary forest. Area state of P14, P14, and P16 is an undisturbed ecosystem. Thus, with regards to AGB, the average of carbon stock of secondary forest (135.976tC ha-1) is higher than the average carbon stock of the gallery forest (74.96tC ha-1). Regarding belowground biomass (BGB), the average carbon stock of secondary forest (31.94tC ha-1) is higher than the average carbon stock of the gallery forest (17.1 tC ha-1) (Figure 3). Also, the three selected plots of the gallery forest are in the site of Blue Lake Forest, and three plots of secondary forest are in the site of Inkou Forest Island. At the three plots of the gallery forest (P14, P15 and P16), there are no trees within a radius of 20 m (tree>60 cm DBH). In contrast, in the secondary forest (P1, P2 and P21), there are 4 trees presented in the 20 m radius (trees>60 cm DBH). In the radius of 6 m (trees 10-30 cm DBH) and the radius of 14 m (trees 30-60 cm DBH) there are trees presented in both types of forest.
Figure 3. Comparison of the distribution of aboveground biomass (AGB) carbon stock (a), and distribution of belowground biomass (BGB) carbon stock (b) in secondary and gallery forests
Figure 4. Average of aboveground biomass (AGB) carbon and below ground biomass (BGB) carbon in Lesio-louna forest in t C ha-1 (a). Total carbon stocks of above-and below-ground biomass by plot in Lesio-louna tropical rainforest (b) by t C ha-1.This figure shows that the carbon stock reaches a higher amount in the aboveground biomass compared to belowground biomass in the study area
Figure 5. Carbon stock of the most dominant plot in the study area. Plot10 is the most dominant plot in the study site with regards to carbon quantity (for above-ground biomass is 363.899t C ha-1, and for below-ground biomass is 85.51t C ha-1)
Figure 6. Frequency distribution of above-and below-ground biomass in Lesio-louna forest
This research aimed to estimate the carbon stocks of above-and below-ground biomass in Lesio-louna forest (Republic of Congo). The methodology of allometric equations from [15] and [41] was used to measure the biomass of the Lesio-louna natural forest [15,41-46]. Results obtained in this study and elsewhere [8, 9, 10] show the necessity of developing specific biomass models for each plot and forest type in Lesio-louna moist forest. The general models of total aboveground biomass should be carefully used in specific areas or carbon projects [21, 26, 46]. In this study, the carbon stock estimation can be directed to researchers and administrators for analyses [50] used to calculate global carbon credits. These can be helpful in improving the forest resources and environmental sectors like those within the Republic of Congo, other Congo basin countries and tropical countries with similar conditions.
This study shows that the carbon stocks in Lesio-louna forest varies from one site to another and from one plot to another (Figure 4). The carbon stock of aboveground biomass [40] is higher compared to belowground biomass (BGB) in all studied plots. The average frequency of aboveground biomass (AGB) was more important compared to belowground biomass (BGB) in studied sites (Figure 6). In this study, we found that the carbon stock is not based on the number of trees, but rather is related to DBH and wood density. In this study area, plot10 is the higher about carbon stock (AGB was 363.899t C ha-1). Plot10 (Figure 5) was in the gallery forest of the Ngoyili site, 30 trees were measured, AGB was 363.899 t C ha-1, BGB was 85.51 t C ha-1 and average DBH was 29.89 cm (Table 1). In Lesio-louna tropical moist forest, the carbon stock was higher within in the aboveground biomass(AGB) compared to belowground biomass as shown in Figure 4. Plot10 is in a submerged area (swamp) and in this area, there's less of Chablis.
The carbon stock in plot 10 is the highest, while the average of tree diameter (DBH) was lower compared to plot 5, because in plot 10 we recorded an important number of trees from Fabaceae and Mimosaceae. Plot 10 is dominated by the Millettia laurentii De Wild., and Piptadeniastrum africanum (Hook.f.) Brenan. So, Millettia laurentii (Fabaceae) and Piptadeniastrum africanum (Mimosaceae) are from the Leguminosae and can play a key role in the functioning of ecosystems. The Leguminosae capture atmospheric nitrogen and enrich the soil with nitrogen. Also, nitrogen is essential for plant growth. Generally, the trees from Leguminosae have the highest quantity of biomass [26].
The number of trees, trees DBH, trees biomass and carbon stock are influenced by the state of area in this forest. Ngoyili River is very close to this plot and the undergrowth of the forest is somewhat sparse and trees of this area generally are considerable in height (Figure 4). Also, high carbon stock of this forest [34, 36] is potentially due to its natural reserve of flora and fauna, and by being a less disturbed forest ecosystem.
With regard to the current status and future challenges in measuring carbon in forest, [9] asserted that, to accurately and precisely measure the carbon in forests would allow global attention as to be sought by countries, comply with agreements under the United Nations Framework Convention on Climate Change (UNFCCC). Methods for measuring coarse AGB have been tested in many forest types, but the methods could be improved if a non-destructive tool for measuring the density of dead wood was developed. Future measurements of carbon storage in forests may rely more on remote sensing data, and new remote data collection technologies are in development. The study concerning tree allometry and improved estimation of carbon stocks and balance in tropical forests from [15] determined that total aboveground stand biomass differed by over 20% from the measured value in several sites, and most of these sites had less than 30 trees, and such small samples may bias the overall predictions. In Lesio-louna tropical forest ecosystem, logging and poaching are strictly prohibited because it is a protected reserve for flora and fauna [5]. In general, the carbon stock of Lesio-louna is higher compared to the study from [38]. In the forest of Lesio-louna, there is a good functioning of ecosystems and the ecological balance is respected. Therefore, the relationship between natural resources and the environment is favorable. However, this forest is preserved and sustainably managed by the Lesio-louna Project from The Aspinall Foundation from UK and The Republic of Congo's Ministry of Forest Economy and Sustainable Development. The average carbon stock for 22 plots of this study was 168.601 t C ha-1 for aboveground biomass, or 81% and 39.55 t C ha-1 for belowground biomass, or 19% (Figure 2). The total carbon stock in 22 plots for AGB was 3,395.36 t C, and for BGB its 909.689 t C. The results reveal that in this forest, the carbon stock is important in aboveground biomass (AGB) compared to belowground biomass (BGB) with measurements of 3,395.36 t C and 909.689 t Carbon respectively. The comparison test of average between plots revealed that the significant difference is 129.05t Cha-1. In addition, we compared the carbon stock of secondary forest with the carbon stock of gallery forest. We made the choice of P1, P2 and P21 for the secondary forest and the P14, P15 and P16 for the gallery forest (Figure 3). The results of this work indicate that the carbon stocks for AGB is more important in secondary forest compared to the gallery forest, with averages of 135.976 t C ha-1 against 74.96 t C ha-1 respectively (Figure 3a), and for BGB is also more important in secondary forest compared to the gallery forest, with averages of 31.94 t C ha-1 against 17.1 t C ha-1 respectively (Figure 3b). Comparison test of means between the two forest types (gallery and secondary forests) revealed a significant difference which is 61.01 t C for Aboveground biomass (AGB) and 14.84 t C for Belowground biomass (BGB). Figure 5 shows that plot10 is the most dominant plot in the study site with regards to carbon quantity or carbon stock (for aboveground biomass we have 363.899 t C ha-1 and 85.51 t C ha-1 for belowground biomass).
Regarding a benchmark map of forest carbon stocks in tropical regions across three continents, [49] asserted thatestimation of the total forest biomass carbon stocks at 10% tree cover is 247 Gt C, with 193 Gt C in AGB and 54 Gt C in BGB. Forests in Latin America are the most extensive and contain around 49% of the total biomass carbon, followed by 26% in Asia and 25% in Africa. Applying a higher tree cover threshold (30%) eliminates large areas of savanna woodlands in Africa from the forest domain and reduces the total carbon stock to 208 Gt C (16% reduction with 163 Gt C for AGB and 45 Gt C for BGB).
In Lesio-louna forest, the carbon stock was higher in the aboveground biomass (AGB) compared to belowground biomass (BGB). The study shows that Plot10 in Ngoyili forest recorded an important number of trees (30 trees) compared to other studied plots. However, the average DBH in Plot10 (Ngoyili site) wasless (29.89 cm) compared to other plots in the study sites. Also, we recorded an important carbon stock in secondary forest compared to the gallery forest, that stock is built up for aboveground biomass (AGB) as well as for belowground biomass (BGB).Moreover, Inkou Forest Island site (secondary forest) is located on the hill and the growth of trees in this forest ecosystem is natural because the sun light penetrates normally. We observed that, in this area, the growth of the forest to savanna is remarkable, because several species of bush land are found in the forest edge and even in the plain forest.
This has an important secondary forest because it is a carbon stock forest of Fabaceae. Fabaceae has species which have the ability to capture atmospheric nitrogen by the presence of nodules in their roots. In this forest ecosystem, we found species such as Millettia laurentii De Wild., Musanga cecropioides R.Br. ex Tedlie, and Piptadeniastrum africanum (Hook.f.) Brenan, that promotes the mitigation of global climate change by the photosynthesis phenomenon.
This study allowed us to estimate the carbon stock of aboveground biomass (AGB) and belowground biomass (BGB) in Lesio-louna moist forest of The Republic of Congo. This study indicates that throughout this forest, the carbon stock for aboveground biomass (AGB) was 81% and the carbon stock for belowground biomass (BGB) was 19%. Plot 10 was the most dominant in terms of carbon stocks in the study area. Thus, the carbon stock of plot16 was less than other plots in the study area. The comparison test of means between plots revealed that a significant difference was 129.05t C ha-1. By this study we found that, the forests in the study area are an important reservoir of carbon, and they can also play a key role for mitigating the global climate change. However, Lesio-louna forest has the capacity to trap vast amounts of carbon which would otherwise escape into the atmosphere as CO2, one of the main greenhouse gases. The potential of carbon stocks capacity in different forest types of Lesio-louna may help the developing African nations to earn carbon credits, reduce deforestation, eliminate poverty, and in the long run to ensure the sustainable forest management. Given the significant differences in carbon stock, Lesio-louna forest could play an important role in carbon sequestration and thus could provide a carbon sink in all Teke-plateau, and also in the whole basin forest of Central Africa (Congo Basin). Thus, knowing the carbon stocks of Lesio-louna forest was important to contribute to the sustainable management of this forest ecosystem to support the REDD+ process.
The authors declare that there is no conflict of interests regarding this paper.
The authors grateful acknowledge China Scholarship Council (CSC), Beijing Forestry University, Republic of Congo's Ministry of Forest Economy and Sustainable Development, Lesio-louna Project from The Aspinall Foundation, The National Science and Technology Support Project (Project No: 2011BAD32B05) from China, and Université Marien Ngouabi for supporting this work. It is a pleasure to acknowledge Thechel Ekoungoulou from Food and Agriculture Organization of the United Nations (FAO),and Charlotte Witham from Beijing Forestry University's School of Nature Conservation for their contribution regarding this study. We also thank an anonymous referee for insightful comments on a previous version of the manuscript.
[1] Alvarez, E., Duque, A., Saldarriaga, J., Cabrera, K., De-Las-Salas, G., Del-Valle, I., Lema, A., Moreno, F., Orrego, S. and Rodríguez, L, "Tree above-ground biomass allometries for carbon stocks estimation in the natural forests of Colombia", Forest Ecology and Management, 267: 297-308, 2012.
[2] ANAC,Situation Météorologique Nationale, Rapport annuel de l'agence nationale de l'aviation civile (ANAC), Ministère de transport et de l'aviation civile, Brazzaville, Congo, 2010.
[3] ANAC,Situation Météorologique Nationale, Rapport annuel de l'agence nationale de l'aviation civile (ANAC), Ministère de transport et de l'aviation civile de la République du Congo, Brazzaville, Congo,2013.
[4] Angelsen, A., Brockhaus, M., Kanninen, M., Sills, E., Sunderlin, W.D. and Kanounnikoff, W.S, Realising REDD+: National strategy and policy, Center for International Forestry Research (CIFOR), Bogor, Indonesia, 2009.
[5] Anon,Rapport annuel du projet Lesio-louna, Ministère de l'Economie Forestière et du Développement Durable, The AspinallFoundation, Brazzaville, Congo, 2010.
[6] Basuki, T.M., Van-Laake, P.E., Skidmore, A.K. and Hussin, Y.A, "Allometric equations for estimating the above-ground biomass in tropical lowland Dipterocarp forests", Forest Ecology and Management, 257 (8): 1684-1694, 2009.
[7] Brown, S, Estimating biomass and biomass change of tropical forests: a primer UN FAO Forestry Paper 134, Food and Agriculture Organization of United Nations (FAO), Rome, Italy, 1997.
[8] Brown, S., Burnham. M., Delaney, M., Vaca, R., Powell, M. and Moreno, A, "Issues and challenges for forest-based carbon-offset projects: a case study of the Noel Kempff Climate Action Project in Bolivia", Mitigation and Adaptation Strategies for Climate Change, 5 (1): 99-121, 2000.
[9] Brown, S, "Measuring carbon in forests: current status and future challenges", Environmental pollution, 116 (3): 363-372, 2002.
[10] Brown, S., Pearson, T., Delaney, M., Shoch, D., Vaca, R. and Quispe, J, The 2003 carbon offsets analysis and status report for the Noel Kempff Climate Action Project, Report to the Nature Conservancy, 2003.
[11] Brown, S., Pearson, T., Slaymaker, D., Ambagis, S., Moore, N., Novelo, D. and Sabido, W, Application of Multispectral 3-Dimensional Aerial Digital Imagery for Estimating Carbon Stocks in a Tropical Pine Savanna, Report to the Nature Conservancy Conservation Partnership Agreement, 2004.
[12] Brown, S., Pearson, T., Moore, N., Parveen, A., Ambagis, S. and Shoch, D, Impact of selective logging on the carbon stocks of tropical forests: Republic of Congo as a case study, Deliverable 6 to USAID, Cooperative Agreement No. EEM-A-00-03-00006-00, Winrock international, Arlington, VA, USA, 2005a.
[13] Brown, S., Pearson, T., Slaymaker, D., Ambagis, S., Moore, N., Novelo, D. and Sabido W, "Creating a virtual tropical forest from three-dimensional aerial imagery to estimate carbon stocks", Ecological Applications, 15: 1083-1095, 2005b.
[14] Chave, J., Rie´ra, B. and Dubois, M.A, "Estimation of biomass in a neotropical forest of French Guiana: spatial and temporal variability", Journal of Tropical Ecology, 17: 79-96, 2001.
[15] Chave, J., Andalo, C., Brown, S., Cairns, M.A., Chambers, J.Q., Eamus, D., Fölster, H., Fromard, F., Higuchi, N., Kira, T., Lescure, J.P., Nelson, B.W., Ogawa, H., Puig, H., Rie´ra, B. and Yamakura, T, "Tree allometry and improved estimation of carbon stocks and balance in tropical forests", Oecologia, 145: 87-99, 2005.
In article  CrossRef PubMed
[16] Chave, J, Muller-Landau, H.C, Baker, T.R., Easdale, T.A., Ter-Steege, H. and Webb, C.O, "Regional and phylogenetic variation of wood density across 2,456 neotropical tree species", Ecological Applications, 16: 2356-2367, 2006.
[17] Chave, J., Condit, R., Muller-Landau, H., Thomas, S., Ashton, P., Bunyavejchewin, S., Co, L., Dattaraja, H., Davies, S., Esufali, S., Ewango, C., Feeley, K., Foster, R., Gunatilleke, N., Gunatilleke, S., Hall, P., Hart, T., Hernández, C., Hubbell, S., Itoh, A., Iratiprayoon, S., Lafrankie, J., Loo-De-Lao, S., Makana, J., Moore, N., Kassim, A., Samper, C., Sukumar, R., Suresh, H., Tan, S., Thompson, J., Tongco, M., Valencia, R., Vallejo, M., Villa, G., Yamakura, T., Zimmerman, J. and Losos, E, "Assessing evidence for a pervasive alteration in tropical tree communities", Plos Biology, 6 (3): e45, 2008.
[18] Chave, J., Coomes, D., Jansen, S., Lewis, S.L., Swenson, N.G. and Zanne, A.E, "Towards a worldwide wood economics spectrum", Ecology Letters, 12:351-366, 2009.
[19] Djomo, A.N., Ibrahima, A., Saborowski, J. and Gravenhorst, G, "Allometric equations for biomass estimations in Cameroon and pan moist tropical equations including biomass data from Africa", Forest Ecology and Management, 260 (10): 1873-1885, 2010.
[20] Ekoungoulou, R., Liu, X., Ifo, S.A., Loumeto, J.J. and Folega, F, "Carbon stock estimation in secondary forest and gallery forest of Congo using allometric equations", International Journal of Scientific and Technology Research, 3 (3): 465-474, 2014a.
[21] Ekoungoulou, R., Liu, X., Loumeto, J.J. and Ifo, S.A, "Tree Above-And Below-Ground Biomass Allometries for Carbon Stocks Estimation in Secondary Forest of Congo", Journal of Environmental Science, Toxicology and Food Technology, 8 (4): 09-20, 2014b.
[22] Ekoungoulou, R., Liu, X., Loumeto, J.J., Ifo, S.., Bocko, Y.E., Koula, F.E. andNiu, S, "Tree Allometry in Tropical Forest of Congo for Carbon Stocks Estimation in Above-Ground Biomass", Open Journal of Forestry, 4 (5): 481-491, 2014c.
[23] Ekoungoulou, R, Carbon Stocks Evaluation in Tropical Forest, Congo, Carbon Stocks in Forest Ecosystems, Lambert Academic Publishing, Edited by Megan Moore, Saarbrucken, Germany, 2014.
[24] FAO, Forest harvesting in natural forests of the Republic of Congo, Forest Harvesting Case Studies-07, Food and Agriculture Organization of United Nations (FAO), Rome, Italy, 1997.
[25] FAO, State of the World's Forests, Food and Agriculture Organization of United Nations (FAO), Rome, Italy, 2003.
[26] FAO,Les forêts du Bassin du Congo, Etat des Forets. Organisation des Nations Unies pour l'Alimentation et l'Agriculture (FAO), Rome, Italy, 2008.
[28] Folega, F., Zhao, H., Zhang, Y., Wala, K. and Akpagana, K, "Ecological and numerical analysis of plant communities of the most conserved protected area in North-Togo", International Journal of Biodiversity and Conservation, 2 (10): 359-369, 2010.
[29] Gorte, W.R, Carbon Sequestration in Forests, Congressional Research Service, Natural Resources Policy, CRS Report for Congress, 2009.
[30] Hall, A, Forests and climate change, The Social dimensions of REDD in Latin America, 2012.
[31] Holmes, T.P., Blake, G.M., Zweede, J.C., Pereira, R., Barreto, P., Boltz, F. and Bauch, R, Financial costs and benefits of reduced-impact logging relative to conventional logging in the eastern Amazon, Tropical Forest Foundation, Arlington, VA, USA, 1999.
[32] IPCC, Third Assessment Report of IPCC, Climate Change 2001: The Scientific Basis, Contribution of Working Group1 to the Third Assessment Report of the Intergovernmental Panel on Climate Change (IPCC), Cambridge University Press, Cambridge, UK, 2001.
[33] IPCC, Special report, Intergovernmental Panel on Climate Change (IPCC), UNEP, New-York, USA, 2007.
[34] IPCC, Renewable energy sources and climate change mitigation, Special report of the Intergovernmental Panel on Climate Change (IPCC), Summary for policymakers and technical summary, WMO, UNEP, New-York, USA, 2011.
[35] Killeen, T.J., Siles, T.M., Grimwood, T., Tieszen, L.L., Steininger, M.K., Tucker, C.J. and Panfil, S, Habitat herterogeneity on a forest-savanna ecotone in Noel Kempff Mercado National Park (Santa Cruz, Bolivia): implications for the long-term conservation of biodiversity in a changing climate, In How Landscapes Change: human disturbance and ecosystem fragmentation in the Americas, Edited by Bradshaw, G.A. and Marquet, P.A, Springer-Verlag, Heidelberg, Germany, 2002.
[36] Lorenz, K. and Lal, R, Carbon sequestration in forest ecosystems, Springer, California, USA, 2009.
[37] Lugo, A.E. and Brown, S, "Steady state ecosystems and the global carbon cycle", Vegetatio, 68:83-90, 1986.
[38] Madgwick, H. and Satoo, T, "On estimating the above ground weights of tree stands", Ecology, 56: 1446-1450, 1975.
[39] Malhi, Y., Baker, T.R., Phillips, O.L., Almeida, S., Alvarez, E., Arroyo, L., Chave, J., Czimczik, C.I. Di-Fiore, A., Higuchi, N., Killeen, T.J., Laurance, S.G., Laurance, W.F., Lewis, S.L., Montoya, L.M.M., Monteagudo, A., Neill, D.A., Nunez-Vargas, P., Patino, S., Pitman, N.C.A., Quesada, C.A., Silva, J.N.M., Lezama, A.T., Vasques-Martinez, R., Terborgh, J., Vinceti, B. and Lloyd, J, "The above-ground coarse wood productivity of 104 Neotropical forest plots", Global Change Biology, 10 (5): 563-591, 2004.
[40] Midgley, J.J, "Is bigger better in plants? The hydraulic costs of increasing size in trees", Trends in Ecology & Evolution, 18: 5-6, 2003.
[41] Mokany, K., Raison, R.J. and Prokushkin, A.S, "Critical analysis of root: shoot ratios in terrestrial biomes", Global Change Biology, 12 (1): 84-96, 2006.
[42] Nelson, B.W., Mesquita, R., Pereira, J.L.G., De-Souza, S.G.A., Batista, G.T. and Couto, L.B, "Allometric regressions for improved estimate of secondary forest biomass in the central Amazon", Forest Ecology and Management, 117: 149-167, 1999.
[43] Niklas, K.J, "Mechanical properties of black locust (Robiniapseudoacacia L.) Wood", Size- and age-dependent variations in sap- and heartwood, Annals of Botany, 79: 265-272, 1997.
[44] Ogawa, H., Yoda, K., Ogino, K. and Kira, T, "Comparative ecological studies on three main types of forest vegetation in Thailand II Plant biomass", Nature and Life in Southeast Asia, 4: 49-80, 1965.
[45] Pearson, T., Ambagis, S., Brown, S., Slaymaker, D., Moore, N, Application of Multispectral 3-Dimensional Aerial Digital Imagery for Estimating Carbon Stocks in a Bottomland Hardwood Forest, Winrock International, Arlington, VA, USA, 2005a.
[46] Pearson, T., Brown, S., Parveen, A. and Moore, N, Use of aerial digital imagery to measure the impact of selective logging on carbon stocks of tropical forests in the Republic of Congo, Delivelable 9 to USAID, Cooperative Agreement No. EEM-A-00-03-00006-00, Winrock international, Arlington, VA, USA, 2005b.
[47] Pearson, T. and Brown, S,Guide de mesure et de suivi du carbone dans les forêts et prairies herbeuses,Winrock international, Arlington, VA, USA, 2005.
[48] Richard, A.J. and Dean, W.W, Applied Multivariate Statistical Analysis, Sixth Edition, Pearson Education Beijing Office, Tsinghua University Press, Beijing, China, 2007.
[49] Saatchi, S.S., Harris, N.L., Brown, S., Lefsky, M., Mitchard, E.T.A., Salas, W., Zutta, B.R., Buermann, W., Lewis, S.L., Hagen, S., Petrova, S., White, L., Silman, M. and Morel, A, "Benchmark map of forest carbon stock in tropical regions across three continents", Proceeding of the National Academy of Sciences of the United States of America, 108 (24): 9899-9904, 2011.
[50] Ullah, M.R. and Amin, M, "Above- and below-ground carbon stock estimation in a natural forest of Bangladesh", Journal of forest science, 58 (8): 372-379, 2012.
[51] Vicente, F.B., Carbajal, N. and Pineda-Martínez, L.F.P, "Estimation of Total Yearly CO2 Emissions by Wildfires in Mexico during the Period 1999-2010", Advances in Meteorology, 1-8, 2014.
[52] Watson, R.T., Noble, I.R, Bolin, B., Ravindranath, N.H., Verardo, D.J. and Donken, D.J, L and Use, Land-Use Change and Forestry, Special Report of the Intergovernmental Panel on Climate Change (IPCC), Cambridge University Press, Cambridge, UK, 2000.

redpajama_set_name: RedPajamaCommonCrawl


Home kb troubleshooting Unable to deploy to another environment using restored SP site templates.
Unable to deploy to another environment using restored SP site templates.
Errors are raised during deployment indicating that the source list/Lib does not contain the required fields. The error raised is "Inconsistency detected between Smartobject X and Service Object X during the loading of the Smartobject definition Method: "CreateListItem" Item not found. We have had this error raised multiple times before but the difference to look out for is in the referred method.
This issue is caused by the list or library being restored from a template between the environments and when saving a list/Lib as a template, advanced settings are not enabled and need to be manually selected.
In this scenario the issue was due to the "Allow management of content types" option not being selected on the restored list on the target environment.


Learn how to apply proven principles from social psychology to increase the level of growth and participation in your community.
If you don't have the level of engagement you want (or you just want a boost), you need to understand how people think, what motivates them, and the advanced social sciences you can apply to satisfy their motivations.
Our mission is to equip you with an advanced understanding of the social sciences you can use to immediately drive more activity in your community and change the behavior of your audience.
Our past 2 workshops in San Francisco and London sold out and averaged an incredible 94% approval rating.
This year, on June 6, we're hosting our first ever workshop in New York City. This workshop will be taught by FeverBee's founder, and the author of Buzzing Communities, Richard Millington.
The workshop is divided into four sessions (motivation, decision-design, persuasion, and communication techniques). Each session is focused on a unique psychological principal.Why our efforts to motivate contributions usually fall flat.
How to identify specifically what motivates members.
How to deploy motivational CTAs throughout your community.
How to nudge people to make decisions that benefit the community.
Why we fail so badly at persuasion.
How to persuade members to do what you want.
Communication techniques used by top experts.
Each of these are new skills you can use not only for your current community, but for any future community you ever work on.
We're going to take a lot of complex psychology and distill it into very specific tactics you can implement the next day.
The full day workshop at the Offsite Loft in the center of New York City.
Breakfast, lunch, coffee, and snacks during the day.
Our full workshop resources package.
Access to all the videos from previous SPRINT events (40+ hours of footage).
If you want to sign up, click here.
We have 30 seats available.
Join us from 9.00am for breakfast and get to meet community managers from across New York.
Our first session of the day covers persuasion. We spend almost every moment in our communities trying to persuade members to take actions which benefit the community. But, sadly, most of this time is wasted because it doesn't embrace the key, psychological, elements involved in persuasion.
We're going to explain how to identify the values, attitudes, and opinions of your members. Then we're going to help you design your persuasion appeals (both emails, newsletters, discussions, and at the direct messages level) to get the outcome you need.
How are members currently predisposed to behave? What would happen if you didn't exist? Why would members perform in this way? How do you get to the bottom of a member's current behavior?
What are values and why do they matter? How do we identify the value clusters that members hold within our communities? How do values shape the activities we initiate and the messages we send to members?
We're going to guide you through the 3 key components of attitudes. We're going to isolate which of these components we can change and which we cannot change. We're also going to cover the biggest mistakes here when we try to persuade members to do anything. This is going to look at the different cognitive, affective, and behavioral levels you need to work on to persuade members to do anything.
What's the significance of opinions and stated community sentiment? How do we track this and what specific words do we need to look for here? Do we need to change opinions to change behavior? If so, how do we set about changing opinions?
By far one of the most important elements in any persuasion effort is your own credibility. This session will cover what techniques you can use to drive higher levels of contribution. How do you increase your own perceived credibility among the audience? What templates can you follow from those who have done it in the past?
This covers the playbook of proven appeals and persuasion efforts that have been used to drive positive results in the past. We look at how different organizations have persuaded their members to take positive steps in the past after changing their attitude towards the object.
By the end of this session you will have a clear process to begin persuading members to do what you need them to do. This is a valuable skill you can use in any group change effort you ever embark upon. This session will also equip you with links to our own data gathering and research techniques.
After a 30-minute break for fruit, nuts, and coffee we'll resume to tackle the most fun part of the day, mind hacks and irrational biases.
The human brain uses a wide array of heuristics to make decisions. These are mental shortcuts that simplify most of the decisions we need to make. It reduces the inputs we pay attention to.
We're going to explain dozens of these and how you can hijack our basic human instincts to get members to do what you want. You're going to learn the principles of nudging members, building habits, anchoring decisions, and personifying influence.
How we decide what we're going to do and why we usually get it completely wrong. How you can help members to decide to join the community, become a volunteer, and use tools like contrasts and scarcity.
We're going to explain the concept of anchoring. How we make decisions and rate objects by contract in comparison with other objects, the role of emotion (and what stimulates emotion), and how to set the right expectations for members when they join.
You've probably read the work of BJ Fogg and Nir Eyal, we're going to cover this but expand to show how it's being regularly implemented in dozens of thriving online communities today.
The more influential you and your members are, the more people are likely to join. If you want to get more people joining and participating in your community, you need to grow your own influence. We're going to highlight the key attributes of influence and how you can acquire them.
During this session we will once again break participants down into size and topic related groups (so you're with people in similar fields) and help you to go through your own communities and push each member of the group through a checklist to ensure you're optimizing each element of human decision making, anchoring, habits, and influence.
Our third session of the day covers motivation. We're going to take you through a brief history of motivation theory and how it applies to online communities. You're going to learn how to get into your members' heads and know exactly what they want (and why what they think they want isn't always what they want). You're also going to discover how most communities have inadvertently been developed to attract lurkers instead of cultivating active participants.
Motivation in online communities (what the research says).
Motivation by community (different types of communities embrace different types of motivation).
Motivation changes by the type of community. We're going to explain what type of motivation will work best for your type of community.
You're going to learn the best techniques to identify what motivates your members to both join and participate in your community. You're going to discover that what members say they want and what they really want are two very different things.
How to transfer motivation hook into practical CTAs.
We're going to break you down into groups by the type of community you manage, then work with each group to develop effective motivational appeals you can test and apply throughout all your communications with members.
Our final session boldly goes where few community professionals have gone before, persuasive communication. We're going to take an evidence-based approach to explaining how you can communicate your ideas and messages persuasively to an audience. This will cover key elements from storytelling, creating a narrative, rhetoric, and the top tips from the greatest speechwriters.
You're going to learn how to get the attention of the top people in your field, how to get your e-mails not just opened, but read, and how to select the specific words and messages you use to communicate with every member.
Every word we use comes with distinct associations for unique groups. We're going to go through most of the common mistakes that undermine our efforts to build a community. We're going to cover the different types of priming and how we can use priming to encourage the kind of behaviors we want.
We'll look at the elements of rhetoric which are as useful online as they are offline. We'll figure out the most common tactics used by the best public speakers in the business. We'll learn the art of the pause, repetition, 3-point lists, and plenty more.
Perfecting the call to action.
Which calls to action are proven to work and which aren't? What does the data say? How can you change what you ask members? Should you give a rationale? Highlight the end result? Or explain what it means to them or to others?
E-mail subject lines and newsletter headings.
Should the headline aim to capture attention or reflect the body content? How long should the headline or subject be? Which factors most determine whether a message gets opened? We'll review the data on what words and length actually drives open-rates and participation.
Our workshops have sold out early for the past 2 years. If you book your tickets before May 1, you will receive a 30% discount.


text:
Calumet Rails, Part 1
In this region, home to much heavy industry, many Chicago-destined rail lines come together at the tip of Lake Michigan. Several north-south lines radiating from the city cross these lines, making for a good deal of rail intersections within a very compact area. Part 1: Illinois.
For more about this product, click on the tabs below.
Disc Format Choose an optionBlu-rayDVD Clear
Calumet Rails, Part 1 quantity
SKU: DVD-CVP-CAL1 Category: Railfan
The Calumet Region is the name given to the geographic areas drained by the Grand Calumet River and the Little Calumet River of northeastern Illinois and northwestern Indiana. In this region many Chicago-destined rail lines that come from the east make a turn along with the southern edge of Lake Michigan. Several north-south lines radiating from the city cross these lines, making for a good deal of rail intersections within a very compact area. Add in all the heavy industry along the lakeshore and one can see why to this day there's such a proliferation of rail traffic in this geographical region. In volume one of our two part series we will examine several rail operations of the region, mainly within the state of Illinois. Locations included are Blue Island, Harvey Junction, Riverdale, the Dolton area, a brief glimpse of the Chicago Rail Link, and then we will work our way east towards many locations just inside the Illinois/Indiana border. A few scenes in the Hoosier state will be seen in our look at some South Shore operations and the final segments at Hohman Avenue and Hammond, Indiana.
C Vision Productions
No Region Code
Shrink Wrapped
Be the first to review "Calumet Rails, Part 1" Cancel reply
Hot Spots 7 Dolton
Homewood & La Grange Hot Spots 35
Hot Spots 31 Blue Island


text:
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <getopt.h>
#include "huff_codes.h"
#include "igzip_lib.h"
#include "test.h"

#include <zlib.h>

#define BUF_SIZE 1024

#define OPTARGS "hl:f:z:i:d:stub:y:w:o:"

#define COMPRESSION_QUEUE_LIMIT 32
#define UNSET -1

#define xstr(a) str(a)
#define str(a) #a

/* Limit output buffer size to 2 Gigabytes. Since stream->avail_out is a
 * uint32_t and there is no logic for handling an overflowed output buffer in
 * the perf test, this define must be less then 4 Gigabytes */
#define MAX_COMPRESS_BUF_SIZE (1U << 31)

int level_size_buf[10] = {
#ifdef ISAL_DEF_LVL0_DEFAULT
	ISAL_DEF_LVL0_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL1_DEFAULT
	ISAL_DEF_LVL1_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL2_DEFAULT
	ISAL_DEF_LVL2_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL3_DEFAULT
	ISAL_DEF_LVL3_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL4_DEFAULT
	ISAL_DEF_LVL4_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL5_DEFAULT
	ISAL_DEF_LVL5_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL6_DEFAULT
	ISAL_DEF_LVL6_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL7_DEFAULT
	ISAL_DEF_LVL7_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL8_DEFAULT
	ISAL_DEF_LVL8_DEFAULT,
#else
	0,
#endif
#ifdef ISAL_DEF_LVL9_DEFAULT
	ISAL_DEF_LVL9_DEFAULT,
#else
	0,
#endif
};

enum {
	ISAL_STATELESS,
	ISAL_STATEFUL,
	ZLIB
};

struct compress_strategy {
	int32_t mode;
	int32_t level;
};

struct inflate_modes {
	int32_t stateless;
	int32_t stateful;
	int32_t zlib;
};

struct perf_info {
	char *file_name;
	size_t file_size;
	size_t deflate_size;
	uint32_t inblock_size;
	uint32_t flush_type;
	int32_t hist_bits;
	int32_t deflate_time;
	int32_t inflate_time;
	struct compress_strategy strategy;
	uint32_t inflate_mode;
	struct perf start;
};

void init_perf_info(struct perf_info *info)
{
	memset(info, 0, sizeof(*info));
	info->deflate_time = BENCHMARK_TIME;
	info->inflate_time = BENCHMARK_TIME;
}

int usage(void)
{
	fprintf(stderr,
		"Usage: igzip_perf [options] <infile>\n"
		"  -h          help, print this message\n"
		"  The options -l, -f, -z may be used up to "
		xstr(COMPRESSION_QUEUE_LIMIT) " times\n"
		"  -l <level>  isa-l stateless deflate level to test ("
		xstr(ISAL_DEF_MIN_LEVEL) "-" xstr(ISAL_DEF_MAX_LEVEL) ")\n"
		"  -f <level>  isa-l stateful deflate level to test ("
		xstr(ISAL_DEF_MIN_LEVEL) "-" xstr(ISAL_DEF_MAX_LEVEL) ")\n"
		"  -z <level>  zlib  deflate level to test\n"
		"  -d <time>   approx time in seconds for deflate (at least 0)\n"
		"  -i <time>   approx time in seconds for inflate (at least 0)\n"
		"  -s          performance test isa-l stateful inflate\n"
		"  -t          performance test isa-l stateless inflate\n"
		"  -u          performance test zlib inflate\n"
		"  -o <file>   output file to store compressed data (last one if multiple)\n"
		"  -b <size>   input buffer size, applies to stateful options (-f,-z,-s)\n"
		"  -y <type>   flush type: 0 (default: no flush), 1 (sync flush), 2 (full flush)\n"
		"  -w <size>   log base 2 size of history window, between 9 and 15\n");
	exit(0);
}

void print_perf_info_line(struct perf_info *info)
{
	printf("igzip_perf-> compress level: %d flush_type: %d block_size: %d\n",
	       info->strategy.level, info->flush_type, info->inblock_size);
}

void print_file_line(struct perf_info *info)
{
	printf("  file info-> name: %s file_size: %lu compress_size: %lu ratio: %2.02f%%\n",
	       info->file_name, info->file_size, info->deflate_size,
	       100.0 * info->deflate_size / info->file_size);
}

void print_deflate_perf_line(struct perf_info *info)
{
	if (info->strategy.mode == ISAL_STATELESS)
		printf("    isal_stateless_deflate-> ");
	else if (info->strategy.mode == ISAL_STATEFUL)
		printf("    isal_stateful_deflate->  ");
	else if (info->strategy.mode == ZLIB)
		printf("    zlib_deflate->           ");

	perf_print(info->start, info->file_size);
}

void print_inflate_perf_line(struct perf_info *info)
{
	if (info->inflate_mode == ISAL_STATELESS)
		printf("    isal_stateless_inflate-> ");
	else if (info->inflate_mode == ISAL_STATEFUL)
		printf("    isal_stateful_inflate->  ");
	else if (info->inflate_mode == ZLIB)
		printf("    zlib_inflate->           ");

	perf_print(info->start, info->file_size);
}

int isal_deflate_round(struct isal_zstream *stream, uint8_t * outbuf, uint32_t outbuf_size,
		       uint8_t * inbuf, uint32_t inbuf_size,
		       uint32_t level, uint8_t * level_buf, uint32_t level_buf_size,
		       int flush_type, int hist_bits)
{
	int check;

	/* Setup stream for stateless compression */
	isal_deflate_init(stream);
	stream->end_of_stream = 1;	/* Do the entire file at once */
	stream->flush = flush_type;
	stream->next_in = inbuf;
	stream->avail_in = inbuf_size;
	stream->next_out = outbuf;
	stream->avail_out = outbuf_size;
	stream->level = level;
	stream->level_buf = level_buf;
	stream->level_buf_size = level_buf_size;
	stream->hist_bits = hist_bits;

	/* Compress stream */
	check = isal_deflate_stateless(stream);

	/* Verify compression success */
	if (check || stream->avail_in)
		return 1;

	return 0;
}

int isal_inflate_round(struct inflate_state *state, uint8_t * inbuf, uint32_t inbuf_size,
		       uint8_t * outbuf, uint32_t outbuf_size, int hist_bits)
{
	int check = 0;

	/* Setup for stateless inflate */
	state->next_in = inbuf;
	state->avail_in = inbuf_size;
	state->next_out = outbuf;
	state->avail_out = outbuf_size;
	state->crc_flag = ISAL_DEFLATE;
	state->hist_bits = hist_bits;

	/* Inflate data */
	check = isal_inflate_stateless(state);

	/* Verify inflate was successful */
	if (check)
		return 1;

	return 0;
}

int isal_deflate_stateful_round(struct isal_zstream *stream, uint8_t * outbuf,
				uint32_t outbuf_size, uint8_t * inbuf,
				uint32_t inbuf_size, uint32_t in_block_size, uint32_t level,
				uint8_t * level_buf, uint32_t level_buf_size, int flush_type,
				int hist_bits)
{
	uint64_t inbuf_remaining;
	int check = COMP_OK;

	/* Setup stream for stateful compression */
	inbuf_remaining = inbuf_size;
	isal_deflate_init(stream);
	stream->flush = flush_type;
	stream->next_in = inbuf;
	stream->next_out = outbuf;
	stream->avail_out = outbuf_size;
	stream->level = level;
	stream->level_buf = level_buf;
	stream->level_buf_size = level_buf_size;
	stream->hist_bits = hist_bits;

	/* Keep compressing so long as more data is available and no error has
	 * been hit */
	while (COMP_OK == check && inbuf_remaining > in_block_size) {
		/* Setup next in buffer, assumes out buffer is sufficiently
		 * large */
		stream->avail_in = in_block_size;
		inbuf_remaining -= in_block_size;

		/* Compress stream */
		check = isal_deflate(stream);
	}

	/* Finish compressing all remaining input */
	if (COMP_OK == check) {
		stream->avail_in = inbuf_remaining;
		stream->end_of_stream = 1;
		check = isal_deflate(stream);
	}

	/* Verify Compression Success */
	if (COMP_OK != check || stream->avail_in > 0)
		return 1;

	return 0;
}

int isal_inflate_stateful_round(struct inflate_state *state, uint8_t * inbuf,
				uint32_t inbuf_size, uint32_t in_block_size, uint8_t * outbuf,
				uint32_t outbuf_size, int hist_bits)
{
	int check = ISAL_DECOMP_OK;
	uint64_t inbuf_remaining;

	isal_inflate_init(state);
	state->next_in = inbuf;
	state->next_out = outbuf;
	state->avail_out = outbuf_size;
	state->hist_bits = hist_bits;
	inbuf_remaining = inbuf_size;

	while (ISAL_DECOMP_OK == check && inbuf_remaining >= in_block_size) {
		state->avail_in = in_block_size;
		inbuf_remaining -= in_block_size;
		check = isal_inflate(state);
	}
	if (ISAL_DECOMP_OK == check && inbuf_remaining > 0) {
		state->avail_in = inbuf_remaining;
		check = isal_inflate(state);
	}

	if (ISAL_DECOMP_OK != check || state->avail_in > 0)
		return 1;

	return 0;
}

int zlib_deflate_round(z_stream * gstream, uint8_t * outbuf, uInt outbuf_size,
		       uint8_t * inbuf, uLong inbuf_size,
		       uLong in_block_size, int level, int flush_type)
{
	uLong inbuf_remaining;
	int check = Z_OK;

	inbuf_remaining = inbuf_size;

	/* Setup stream for stateful compression */
	if (0 != deflateReset(gstream))
		return 1;

	gstream->next_in = inbuf;
	gstream->next_out = outbuf;
	gstream->avail_out = outbuf_size;

	/* Keep compressing so long as more data is available and no error has
	 * been hit */
	while (Z_OK == check && inbuf_remaining > in_block_size) {
		gstream->avail_in = in_block_size;
		inbuf_remaining -= in_block_size;
		check = deflate(gstream, flush_type);
	}

	/* Finish compressing all remaining input */
	if (Z_OK == check) {
		gstream->avail_in = inbuf_remaining;
		check = deflate(gstream, Z_FINISH);
	}

	/* Verify Compression Success */
	if (Z_STREAM_END != check)
		return 1;

	return 0;
}

int zlib_inflate_round(z_stream * gstream, uint8_t * inbuf,
		       uLong inbuf_size, uint8_t * outbuf, uInt outbuf_size)
{
	int check = 0;

	if (0 != inflateReset(gstream))
		return 1;

	gstream->next_in = inbuf;
	gstream->avail_in = inbuf_size;
	gstream->next_out = outbuf;
	gstream->avail_out = outbuf_size;
	check = inflate(gstream, Z_FINISH);
	if (check != Z_STREAM_END)
		return 1;

	return 0;
}

int isal_deflate_perf(uint8_t * outbuf, uint64_t * outbuf_size, uint8_t * inbuf,
		      uint64_t inbuf_size, int level, int flush_type, int hist_bits, int time,
		      struct perf *start)
{
	struct isal_zstream stream;
	uint8_t *level_buf = NULL;
	int check;

	if (level_size_buf[level] > 0) {
		level_buf = malloc(level_size_buf[level]);
		if (level_buf == NULL)
			return 1;
	}

	BENCHMARK(start, time, check =
		  isal_deflate_round(&stream, outbuf, *outbuf_size, inbuf,
				     inbuf_size, level, level_buf,
				     level_size_buf[level], flush_type, hist_bits));
	*outbuf_size = stream.total_out;
	return check;
}

int isal_deflate_stateful_perf(uint8_t * outbuf, uint64_t * outbuf_size, uint8_t * inbuf,
			       uint64_t inbuf_size, int level, int flush_type,
			       uint64_t in_block_size, int hist_bits, int time,
			       struct perf *start)
{
	struct isal_zstream stream;
	uint8_t *level_buf = NULL;
	int check;

	if (in_block_size == 0)
		in_block_size = inbuf_size;

	if (level_size_buf[level] > 0) {
		level_buf = malloc(level_size_buf[level]);
		if (level_buf == NULL)
			return 1;
	}

	BENCHMARK(start, time, check =
		  isal_deflate_stateful_round(&stream, outbuf, *outbuf_size, inbuf, inbuf_size,
					      in_block_size, level, level_buf,
					      level_size_buf[level], flush_type, hist_bits));
	*outbuf_size = stream.total_out;
	return check;

}

int zlib_deflate_perf(uint8_t * outbuf, uint64_t * outbuf_size, uint8_t * inbuf,
		      uint64_t inbuf_size, int level, int flush_type,
		      uint64_t in_block_size, int hist_bits, int time, struct perf *start)
{
	int check;
	z_stream gstream;
	int flush_translator[] = { Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH };

	if (in_block_size == 0)
		in_block_size = inbuf_size;

	flush_type = flush_translator[flush_type];

	/* Initialize the gstream buffer */
	gstream.next_in = inbuf;
	gstream.avail_in = inbuf_size;
	gstream.zalloc = Z_NULL;
	gstream.zfree = Z_NULL;
	gstream.opaque = Z_NULL;

	if (hist_bits == 0)
		hist_bits = -15;
	else
		hist_bits = -hist_bits;

	if (0 != deflateInit2(&gstream, level, Z_DEFLATED, hist_bits, 9, Z_DEFAULT_STRATEGY))
		return 1;

	BENCHMARK(start, time, check =
		  zlib_deflate_round(&gstream, outbuf, *outbuf_size, inbuf, inbuf_size,
				     in_block_size, level, flush_type));

	*outbuf_size = gstream.total_out;
	deflateEnd(&gstream);

	return check;
}

int isal_inflate_perf(uint8_t * inbuf, uint64_t inbuf_size, uint8_t * outbuf,
		      uint64_t outbuf_size, uint8_t * filebuf, uint64_t file_size,
		      int hist_bits, int time, struct perf *start)
{
	struct inflate_state state;
	int check;

	/* Check that data decompresses */
	check = isal_inflate_round(&state, inbuf, inbuf_size, outbuf, outbuf_size, hist_bits);
	if (check || state.total_out != file_size || memcmp(outbuf, filebuf, file_size))
		return 1;

	BENCHMARK(start, time, isal_inflate_round(&state, inbuf, inbuf_size,
						  outbuf, outbuf_size, hist_bits));

	return check;
}

int isal_inflate_stateful_perf(uint8_t * inbuf, uint64_t inbuf_size, uint8_t * outbuf,
			       uint64_t outbuf_size, uint8_t * filebuf, uint64_t file_size,
			       uint64_t in_block_size, int hist_bits, int time,
			       struct perf *start)
{
	struct inflate_state state;
	int check;

	if (in_block_size == 0)
		in_block_size = inbuf_size;

	check = isal_inflate_round(&state, inbuf, inbuf_size, outbuf, outbuf_size, hist_bits);
	if (check || state.total_out != file_size || memcmp(outbuf, filebuf, file_size))
		return 1;

	BENCHMARK(start, time,
		  isal_inflate_stateful_round(&state, inbuf, inbuf_size, in_block_size, outbuf,
					      outbuf_size, hist_bits));

	return 0;

}

int zlib_inflate_perf(uint8_t * inbuf, uint64_t inbuf_size, uint8_t * outbuf,
		      uint64_t outbuf_size, uint8_t * filebuf, uint64_t file_size,
		      int hist_bits, int time, struct perf *start)
{
	int check;
	z_stream gstream;

	gstream.next_in = inbuf;
	gstream.avail_in = inbuf_size;
	gstream.zalloc = Z_NULL;
	gstream.zfree = Z_NULL;
	gstream.opaque = Z_NULL;

	if (hist_bits == 0)
		hist_bits = -15;
	else
		hist_bits = -hist_bits;

	if (0 != inflateInit2(&gstream, hist_bits))
		return 1;

	check = zlib_inflate_round(&gstream, inbuf, inbuf_size, outbuf, outbuf_size);
	if (check || gstream.total_out != file_size || memcmp(outbuf, filebuf, file_size))
		return 1;

	BENCHMARK(start, time,
		  zlib_inflate_round(&gstream, inbuf, inbuf_size, outbuf, outbuf_size));

	inflateEnd(&gstream);
	return 0;
}

int main(int argc, char *argv[])
{
	FILE *in = NULL;
	unsigned char *compressbuf, *decompbuf, *filebuf;
	char *outfile = NULL;
	int i, c, ret = 0;
	uint64_t decompbuf_size, compressbuf_size;
	uint64_t block_count;

	struct compress_strategy compression_queue[COMPRESSION_QUEUE_LIMIT];

	int compression_queue_size = 0;
	struct compress_strategy compress_strat;
	struct inflate_modes inflate_strat = { 0 };
	struct perf_info info;
	init_perf_info(&info);

	while ((c = getopt(argc, argv, OPTARGS)) != -1) {
		switch (c) {
		case 'l':
			if (compression_queue_size >= COMPRESSION_QUEUE_LIMIT) {
				printf("Too many levels specified");
				exit(0);
			}

			compress_strat.mode = ISAL_STATELESS;
			compress_strat.level = atoi(optarg);
			if (compress_strat.level > ISAL_DEF_MAX_LEVEL) {
				printf("Unsupported isa-l compression level\n");
				exit(0);
			}

			compression_queue[compression_queue_size] = compress_strat;
			compression_queue_size++;
			break;
		case 'f':
			if (compression_queue_size >= COMPRESSION_QUEUE_LIMIT) {
				printf("Too many levels specified");
				exit(0);
			}

			compress_strat.mode = ISAL_STATEFUL;
			compress_strat.level = atoi(optarg);
			if (compress_strat.level > ISAL_DEF_MAX_LEVEL) {
				printf("Unsupported isa-l compression level\n");
				exit(0);
			}

			compression_queue[compression_queue_size] = compress_strat;
			compression_queue_size++;
			break;
		case 'z':
			if (compression_queue_size >= COMPRESSION_QUEUE_LIMIT) {
				printf("Too many levels specified");
				exit(0);
			}

			compress_strat.mode = ZLIB;
			compress_strat.level = atoi(optarg);
			if (compress_strat.level > Z_BEST_COMPRESSION) {
				printf("Unsupported zlib compression level\n");
				exit(0);
			}
			compression_queue[compression_queue_size] = compress_strat;
			compression_queue_size++;
			break;
		case 'i':
			info.inflate_time = atoi(optarg);
			if (info.inflate_time < 0)
				usage();
			break;
		case 'd':
			info.deflate_time = atoi(optarg);
			if (info.deflate_time < 0)
				usage();
			break;
		case 's':
			inflate_strat.stateful = 1;
			break;
		case 't':
			inflate_strat.stateless = 1;
			break;
		case 'u':
			inflate_strat.zlib = 1;
			break;
		case 'b':
			inflate_strat.stateful = 1;
			info.inblock_size = atoi(optarg);
			break;
		case 'y':
			info.flush_type = atoi(optarg);
			if (info.flush_type != NO_FLUSH && info.flush_type != SYNC_FLUSH
			    && info.flush_type != FULL_FLUSH) {
				printf("Unsupported flush type\n");
				exit(0);
			}
			break;

		case 'w':
			info.hist_bits = atoi(optarg);
			if (info.hist_bits > 15 || info.hist_bits < 9)
				usage();
			break;
		case 'o':
			outfile = optarg;
			break;
		case 'h':
		default:
			usage();
			break;
		}
	}

	if (optind >= argc)
		usage();

	if (!inflate_strat.stateless && !inflate_strat.stateful && !inflate_strat.zlib) {
		if (info.inblock_size == 0)
			inflate_strat.stateless = 1;
		else
			inflate_strat.stateful = 1;
	}

	/* Allocate space for entire input file and output
	 * (assuming some possible expansion on output size)
	 */
	info.file_name = argv[optind];
	in = fopen(info.file_name, "rb");
	if (NULL == in) {
		printf("Error: Can not find file %s\n", info.file_name);
		exit(0);
	}

	info.file_size = get_filesize(in);
	if (info.file_size == 0) {
		printf("Error: input file has 0 size\n");
		exit(0);
	}

	decompbuf_size = info.file_size;

	if (compression_queue_size == 0) {
		if (info.inblock_size == 0)
			compression_queue[0].mode = ISAL_STATELESS;
		else
			compression_queue[0].mode = ISAL_STATEFUL;
		compression_queue[0].level = 1;
		compression_queue_size = 1;
	}

	filebuf = malloc(info.file_size);
	if (filebuf == NULL) {
		fprintf(stderr, "Can't allocate temp buffer memory\n");
		exit(0);
	}

	block_count = 1;
	if (info.flush_type > 0)
		block_count = (info.file_size + info.inblock_size - 1) / info.inblock_size;

	/* Way overestimate likely compressed size to handle bad type 0 and
	 * small block_size case */
	compressbuf_size = block_count * ISAL_DEF_MAX_HDR_SIZE + 2 * info.file_size;
	if (compressbuf_size >= MAX_COMPRESS_BUF_SIZE)
		compressbuf_size = MAX_COMPRESS_BUF_SIZE;

	compressbuf = malloc(compressbuf_size);
	if (compressbuf == NULL) {
		fprintf(stderr, "Can't allocate input buffer memory\n");
		exit(0);
	}

	decompbuf = malloc(decompbuf_size);
	if (decompbuf == NULL) {
		fprintf(stderr, "Can't allocate output buffer memory\n");
		exit(0);
	}

	if (info.file_size != fread(filebuf, 1, info.file_size, in)) {
		fprintf(stderr, "Could not read in all input\n");
		exit(0);
	}
	fclose(in);

	for (i = 0; i < compression_queue_size; i++) {
		if (i > 0)
			printf("\n\n");

		info.strategy = compression_queue[i];
		print_perf_info_line(&info);

		info.deflate_size = compressbuf_size;

		if (info.strategy.mode == ISAL_STATELESS)
			ret = isal_deflate_perf(compressbuf, &info.deflate_size, filebuf,
						info.file_size, compression_queue[i].level,
						info.flush_type, info.hist_bits,
						info.deflate_time, &info.start);
		else if (info.strategy.mode == ISAL_STATEFUL)
			ret =
			    isal_deflate_stateful_perf(compressbuf, &info.deflate_size,
						       filebuf, info.file_size,
						       compression_queue[i].level,
						       info.flush_type, info.inblock_size,
						       info.hist_bits, info.deflate_time,
						       &info.start);
		else if (info.strategy.mode == ZLIB)
			ret = zlib_deflate_perf(compressbuf, &info.deflate_size, filebuf,
						info.file_size, compression_queue[i].level,
						info.flush_type, info.inblock_size,
						info.hist_bits, info.deflate_time,
						&info.start);

		if (ret) {
			printf("  Error in compression\n");
			continue;
		}

		print_file_line(&info);
		printf("\n");
		print_deflate_perf_line(&info);
		printf("\n");

		if (outfile != NULL && i + 1 == compression_queue_size) {
			FILE *out;
			out = fopen(outfile, "wb");
			fwrite(compressbuf, 1, info.deflate_size, out);
			fclose(out);
		}

		if (info.inflate_time == 0)
			continue;

		if (inflate_strat.stateless) {
			info.inflate_mode = ISAL_STATELESS;
			ret = isal_inflate_perf(compressbuf, info.deflate_size, decompbuf,
						decompbuf_size, filebuf, info.file_size,
						info.hist_bits, info.inflate_time,
						&info.start);
			if (ret)
				printf("    Error in isal stateless inflate\n");
			else
				print_inflate_perf_line(&info);
		}

		if (inflate_strat.stateful) {
			info.inflate_mode = ISAL_STATEFUL;
			ret =
			    isal_inflate_stateful_perf(compressbuf, info.deflate_size,
						       decompbuf, decompbuf_size, filebuf,
						       info.file_size, info.inblock_size,
						       info.hist_bits, info.inflate_time,
						       &info.start);

			if (ret)
				printf("    Error in isal stateful inflate\n");
			else
				print_inflate_perf_line(&info);
		}

		if (inflate_strat.zlib) {
			info.inflate_mode = ZLIB;
			ret = zlib_inflate_perf(compressbuf, info.deflate_size, decompbuf,
						decompbuf_size, filebuf, info.file_size,
						info.hist_bits, info.inflate_time,
						&info.start);
			if (ret)
				printf("    Error in zlib inflate\n");
			else
				print_inflate_perf_line(&info);
		}
	}

	free(compressbuf);
	free(decompbuf);
	free(filebuf);
	return 0;
}

redpajama_set_name: RedPajamaGithub