package au.org.aurin.wif.impl.population;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// TODO: Auto-generated Javadoc
/**
* <b>PopulationProjector.java</b> : includes logic for discovering land demand
*
* @author <a href="mailto:marcosnr@unimelb.edu.au"> Marcos Nino-Ruiz
* marcosnr@unimelb.edu.au</a> - 2012
*/
public class PopulationProjector {
/**
* logger.
*/
private static final Logger LOGGER = LoggerFactory
.getLogger(PopulationProjector.class);
/**
* Adjust population vacancy.
* See Appendix F of What If manual for detailed functionality
* @param projected
* the projected
* @param vacancyRate
* the vacancy rate
* @return the double
*/
private static Double adjustPopulationVacancy(Double projected,
Double vacancyRate) {
return projected * (1 - vacancyRate);
}
/**
* Adjust infill.
* See Appendix F of What If manual for detailed functionality
* @param newHUnits
* the demand
* @param infillRate
* the infill rate
* @return the double
*/
public static Double adjustPopulationInfill(Double newHUnits,
Double infillRate) {
return newHUnits / (1 - infillRate);
}
/**
* Project residential population.
* See Appendix F of What If manual for detailed functionality
* @param unchangedLandUseArea
* the unchanged land use area
* @param newLandUseArea
* the new land use area
* @param averageHousehold
* the average household
* @param currentResidentialDensity
* the current residential density
* @param projectedResidentialDensity
* the projected residential density
* @param vacancyRate
* the vacancy rate
* @param infillRate
* the infill rate
* @param averageHouseHoldSize
* the average house hold size
* @return the double
*/
public static Double projectResidentialPopulation(
Double unchangedLandUseArea, Double newLandUseArea,
Double averageHousehold, Double currentResidentialDensity,
Double projectedResidentialDensity, Double vacancyRate,
Double infillRate, Double averageHouseHoldSize) {
Double currentHUnits = unchangedLandUseArea * currentResidentialDensity;
LOGGER.debug(" currentHUnits : {}", currentHUnits);
Double projectedHUnits = newLandUseArea * projectedResidentialDensity;
LOGGER.debug(" projectedHUnits : {}", projectedHUnits);
Double newHUnits = currentHUnits + projectedHUnits;
LOGGER.debug(" newHUnits : {}", newHUnits);
Double infilledNnewHUnits = adjustPopulationInfill(newHUnits,
infillRate);
LOGGER.debug(" infilledNnewHUnits : {}", infilledNnewHUnits);
Double newHouseHolds = adjustPopulationVacancy(infilledNnewHUnits,
vacancyRate);
LOGGER.debug(" newHouseHolds : {}", newHouseHolds);
Double newPopulation = newHouseHolds * averageHouseHoldSize;
LOGGER.debug(" newPopulation : {}", newPopulation);
return newPopulation;
}
/**
* Project population group quarters.
* See Appendix F of What If manual for detailed functionality
* @param unchangedLandUseArea
* the unchanged land use area
* @param newLandUseArea
* the new land use area
* @param currentResidentialDensity
* the current residential density
* @param projectedResidentialDensity
* the projected residential density
* @return the double
*/
public static Double projectPopulationGroupQuarters(
Double unchangedLandUseArea, Double newLandUseArea,
Double currentResidentialDensity, Double projectedResidentialDensity) {
Double currentHUnits = unchangedLandUseArea * currentResidentialDensity;
LOGGER.debug(" current : {}", currentHUnits);
Double projectedHUnits = newLandUseArea * projectedResidentialDensity;
LOGGER.debug(" projected : {}", projectedHUnits);
Double newGroupQuaters = currentHUnits + projectedHUnits;
LOGGER.debug(" newGroupQuaters : {}", newGroupQuaters);
return newGroupQuaters;
}
}