16#ifndef __GROUND_TIME_DATA_HPP
17#define __GROUND_TIME_DATA_HPP
25namespace po = boost::program_options;
50 const double nb_days = 365;
51 double n =
t/(60*60*24);
52 return n - floor(
n/nb_days)*nb_days;
55 const double nb_days = 365;
56 double a = -0.1e1 / (
double) nb_days / (
double) (
High -
Low - nb_days) * M_PI * (
double) (2 *
High - 2 *
Low - nb_days) / (
double) (
High -
Low);
58 double c = -0.1e1 / (
double) nb_days / (
double) (
High -
Low - nb_days) * M_PI * (
double) (2 *
High - 2 *
Low - nb_days) / (
double) (
High -
Low);
78 ifstream ini_file(file);
80 po::options_description config_file_options;
81 config_file_options.add_options()
83 (
"latitude",po::value<double>(&
spaData.
latitude)->default_value(51.5072))
84 (
"year",po::value<int>(&
spaData.
year)->default_value(2014))
85 (
"month",po::value<int>(&
spaData.
month)->default_value(6))
86 (
"day",po::value<int>(&
spaData.
day)->default_value(21))
87 (
"hour",po::value<int>(&
spaData.
hour)->default_value(0))
89 (
"second",po::value<double>(&
spaData.
second)->default_value(0))
92 (
"TdayAtSummer",po::value<double>(&
TdaySummer)->default_value(10),
"Day temerature at summer")
93 (
"TnigthAtSummer",po::value<double>(&
TnigthSummer)->default_value(8),
"Nigth temerature at summer")
94 (
"TdayAtWinter",po::value<double>(&
TdayWinter)->default_value(-8),
"Day temerature at winter")
95 (
"TnigthAtWinter",po::value<double>(&
TnigthWinter)->default_value(-10),
"Nigth temerature at winter")
96 (
"DayOfLowTemperature",po::value<int>(&
Low)->default_value(0))
97 (
"DayOfHighTemperature",po::value<int>(&
High)->default_value(182))
98 (
"DewPoint",po::value<double>(&
Td)->default_value(0),
"Dew point in Celsius degrees")
99 (
"u10",po::value<double>(&
u10)->default_value(2.7))
100 (
"CR",po::value<double>(&
CR)->default_value(0))
101 (
"Pressure",po::value<double>(&
P)->default_value(101325))
102 (
"Rs",po::value<double>(&
Rs)->default_value(0));
103 store(parse_config_file(ini_file,config_file_options), vm);
115 }
catch (
const std::exception& ex) {
117 ss << ex.what() << endl;
121 PetscFunctionReturn(0);
133 double tmin = 12-td/2;
134 double tmax = 12+(tmin*(12-tmin))/13.5;
136 double h = (
t-floor(
t/(3600*24))*3600*24)/3600.;
139 if((
h<tmin)||(
h>tmax)) {
142 T = (Tmax-(Tmax-Tmin)*pow(sin(0.5*M_PI*(h_-tmax)/(24+tmin-tmax)),1.2));
144 T = Tmin+(Tmax-Tmin)*pow(sin(0.5*M_PI*(
h-tmin)/(tmax-tmin)),1.4);
150 PetscErrorCode
testCode(
double duration,
double step) {
164 #ifdef BOOST_IOSTREAMS_TEE_HPP_INCLUDED
165 typedef tee_device<ostream, ofstream>
TeeDevice;
167 ofstream ofs(
"time_variation_model.txt");
173 for(;
t<
t0+duration;
t+=step) {
175 struct tm current_time;
176 current_time = *gmtime(&
t);
188 SETERRQ1(PETSC_COMM_SELF,1,
"wrong input data for solar position calulator error codde %d",r);
193 #ifndef BOOST_IOSTREAMS_TEE_HPP_INCLUDED
194 PetscPrintf(PETSC_COMM_WORLD,
"%3.4f %3.4f\n",((
double)
t-(
double)
t0)/(60*60*24),T);
196 my_split.precision(3);
197 my_split << ((
double)
t-(
double)
t0)/(60*60*24) <<
" " << T << endl;
202 PetscFunctionReturn(0);
239 PetscFunctionReturn(0);
246 PetscErrorCode
set(
double time = 0) {
252 struct tm current_time;
253 current_time = *gmtime(&
t);
265 SETERRQ1(PETSC_COMM_SELF,1,
"wrong input data for solar position calulator error codde %d",r);
272 PetscPrintf(PETSC_COMM_WORLD,
273 "Suntransit %3.2f Sunrise %3.2f Sunset %3.2f Ta = %3.2f \n" ,
276 PetscPrintf(PETSC_COMM_WORLD,
"Time %s",asctime(¤t_time));
279 PetscFunctionReturn(0);
static PetscErrorCode ierr
@ MOFEM_STD_EXCEPTION_THROW
FTensor::Index< 'n', SPACE_DIM > n
const double c
speed of light (cm/ns)
constexpr double t
plate stiffness
int spa_calculate(spa_data *spa)
double wetherTime(double n)
PetscErrorCode readFile(const char file[])
PetscErrorCode testCode(double duration, double step)
CrudeClimateModel(const char file[])
double fractinalDayTime(double t)
PetscErrorCode setDefault()
PetscErrorCode set(double time=0)
set time in days
double funT(double t, double t0=0)
double funTnigth(double t)