///////////////////////////////////////////////////////////////////////////////////////
/// \file framework.h
/// \brief The 'mission control' of the model
///
/// $Date: 2020-06-12 17:25:52 +0200 (ven, 12 jun 2020) $
///
///////////////////////////////////////////////////////////////////////////////////////

#ifndef LPJ_GUESS_FRAMEWORK_H
#define LPJ_GUESS_FRAMEWORK_H

class CommandLineArguments;

/// The 'mission control' of the model
/** 
 *  Responsible for maintaining the primary model data structures and containing
 *  all explicit loops through space (grid cells/stands) and time (days and 
 *  years).
 *
 *  \param args The command line arguments, sent in from main
 *
 */
int framework(const CommandLineArguments& args);


/// Called from eceframework.cpp to run LPJ-GUESS for one time step of the model, for these co-ordinates
/** 
 *  Input data comes from OASIS
 *  Output fed back to eceframework.cpp and subsequently sent to OASIS
 *  
 *  \param args The command line arguments, sent in from eceframework.cpp
 *
 */
void guess_coupled(int& id,
					int localrank,
					int numlpjgprocesses,
					int isfinal,
					double lon,
					double lat,
					int ifs_soilcd,
					int ifs_index,
					int ndep_index,
					int year,
					int sim_year,
					int month,
					int monthday,
					int hour,
					double temp,
					double precip,
					double netswrad,
					double netlwrad,
					double co2std,
					double temp_soil,
					double soilw_surf,
					double soilw_deep, //Arg21
					double vegl, 
					int vegl_type,
					float& cfluxnattoday,
					float& cfluxanttoday,
					float& npptoday,
					float& laiphen_high,
					float& laiphen_low,
					float& ifsvegfrachigh,
					int& ifsvegtypehigh,
					float& ifsvegfraclow,
					int& ifsvegtypelow,
					bool islpjgspinup,
					int fixedNDepafter, 
					int fixedLUafter);

void guess_coupled_finish();

#endif // LPJ_GUESS_FRAMEWORK_H
