cloudy
trunk
source
parse_illuminate.cpp
Go to the documentation of this file.
1
/* This file is part of Cloudy and is copyright (C)1978-2013 by Gary J. Ferland and
2
* others. For conditions of distribution and use see copyright notice in license.txt */
3
/*ParseStop parse the stop command */
4
#include "
cddefines.h
"
5
#include "
physconst.h
"
6
#include "
optimize.h
"
7
#include "
phycon.h
"
8
#include "
rfield.h
"
9
#include "
radius.h
"
10
#include "
geometry.h
"
11
#include "
iterations.h
"
12
#include "
stopcalc.h
"
13
#include "
input.h
"
14
#include "
parser.h
"
15
16
void
ParseIlluminate
(
Parser
&p)
17
{
18
DEBUG_ENTRY
(
"ParseIlluminate()"
);
19
20
if
(
rfield
.
nShape
< 1 )
21
{
22
fprintf(
ioQQQ
,
"PROBLEM the illuminate command has come before any "
23
"radiation field shape commands.\nThis must come after the field"
24
" is specified.\nSorry.\n"
);
25
cdEXIT
(
EXIT_FAILURE
);
26
}
27
28
rfield
.
Illumination
[
rfield
.
nShape
-1] =
Illuminate::FORWARD
;
// default
29
// use chCard()+4 to make sure the command ILLUMINATE itself is not picked up
30
if
( p.
nMatch
(
"FORW"
) )
31
rfield
.
Illumination
[
rfield
.
nShape
-1] =
Illuminate::FORWARD
;
32
else
if
( p.
nMatch
(
"REVE"
) )
33
rfield
.
Illumination
[
rfield
.
nShape
-1] =
Illuminate::REVERSE
;
34
else
if
( p.
nMatch
(
"SYMM"
) )
35
rfield
.
Illumination
[
rfield
.
nShape
-1] =
Illuminate::SYMMETRIC
;
36
37
// isotropic case
38
if
( p.
nMatch
(
"ISOT"
) )
39
{
40
// isotropic illumination - following not meaningful
41
rfield
.
OpticalDepthScaleFactor
[
rfield
.
nShape
-1] = 1.;
42
rfield
.
lgBeamed
[
rfield
.
nShape
-1] =
false
;
43
}
44
else
45
{
46
double
AngleIllumRadian = 0.;
47
48
/* default is to specify an illumination angle */
49
rfield
.
lgBeamed
[
rfield
.
nShape
-1] =
true
;
50
double
a = p.
FFmtRead
();
51
if
( p.
lgEOL
() )
52
p.
NoNumb
(
"illumination angle"
);
53
54
/* default is degrees, but radian key accepted */
55
if
( p.
nMatch
(
"RADI"
) )
56
AngleIllumRadian = a;
57
else
58
AngleIllumRadian = a/
RADIAN
;
59
if
( AngleIllumRadian < 0. || AngleIllumRadian >=
PI
/2. )
60
{
61
fprintf(
ioQQQ
,
" Angle of illumination must be between 0 and 90 degrees "
62
"or 0 and pi/2 radians.\n"
);
63
cdEXIT
(
EXIT_FAILURE
);
64
}
65
66
/* this is effective path 1. / COS( theta ) - so that
67
* dTau_eff = dTau_normal * geometry.DirectionalCosin */
68
geometry
.
DirectionalCosin
= (
realnum
)(1./cos(AngleIllumRadian));
69
70
rfield
.
OpticalDepthScaleFactor
[
rfield
.
nShape
-1] =
71
(
realnum
)(1./cos(AngleIllumRadian));
72
73
/* vary option */
74
if
(
optimize
.
lgVarOn
)
75
{
76
/* no luminosity options on vary */
77
optimize
.
nvarxt
[
optimize
.
nparm
] = 1;
78
if
( p.
nMatch
(
"RADI"
) )
79
{
80
strcpy(
optimize
.
chVarFmt
[
optimize
.
nparm
],
"ILLUMINATE %f RADIAN"
);
81
optimize
.
vparm
[0][
optimize
.
nparm
] = (
realnum
)AngleIllumRadian;
82
optimize
.
varang
[
optimize
.
nparm
][0] = 0.f;
83
optimize
.
varang
[
optimize
.
nparm
][1] =
realnum
(
PI
/2.);
84
}
85
else
86
{
87
strcpy(
optimize
.
chVarFmt
[
optimize
.
nparm
],
"ILLUMINATE %f"
);
88
optimize
.
vparm
[0][
optimize
.
nparm
] = (
realnum
)(AngleIllumRadian*
RADIAN
);
89
optimize
.
varang
[
optimize
.
nparm
][0] = 0.f;
90
optimize
.
varang
[
optimize
.
nparm
][1] = 90.f;
91
}
92
93
if
(
rfield
.
Illumination
[
rfield
.
nShape
-1] ==
Illuminate::FORWARD
)
94
strcat(
optimize
.
chVarFmt
[
optimize
.
nparm
],
" FORWARD"
);
95
else
if
(
rfield
.
Illumination
[
rfield
.
nShape
-1] ==
Illuminate::REVERSE
)
96
strcat(
optimize
.
chVarFmt
[
optimize
.
nparm
],
" REVERSE"
);
97
else
if
(
rfield
.
Illumination
[
rfield
.
nShape
-1] ==
Illuminate::SYMMETRIC
)
98
strcat(
optimize
.
chVarFmt
[
optimize
.
nparm
],
" SYMMETRIC"
);
99
100
optimize
.
lgOptimizeAsLinear
[
optimize
.
nparm
] =
true
;
101
/* pointer to where to write */
102
optimize
.
nvfpnt
[
optimize
.
nparm
] =
input
.
nRead
;
103
/* the increment in the first steps away from the original value */
104
optimize
.
vincr
[
optimize
.
nparm
] = 0.1f;
105
optimize
.
nparm
+= 1;
106
}
107
}
108
}
109
Parser::nMatch
bool nMatch(const char *chKey) const
Definition:
parser.h:135
t_optimize::vincr
realnum vincr[LIMPAR]
Definition:
optimize.h:191
Parser::FFmtRead
double FFmtRead(void)
Definition:
parser.cpp:353
t_optimize::nparm
long int nparm
Definition:
optimize.h:201
t_input::nRead
long int nRead
Definition:
input.h:49
rfield
t_rfield rfield
Definition:
rfield.cpp:8
ioQQQ
FILE * ioQQQ
Definition:
cddefines.cpp:7
geometry.h
realnum
float realnum
Definition:
cddefines.h:103
rfield.h
t_optimize::lgVarOn
bool lgVarOn
Definition:
optimize.h:203
RADIAN
const UNUSED double RADIAN
Definition:
physconst.h:63
Illuminate::FORWARD
@ FORWARD
Definition:
rfield.h:30
input
t_input input
Definition:
input.cpp:12
ParseIlluminate
void ParseIlluminate(Parser &p)
Definition:
parse_illuminate.cpp:16
PI
const UNUSED double PI
Definition:
physconst.h:29
t_geometry::DirectionalCosin
realnum DirectionalCosin
Definition:
geometry.h:15
optimize
t_optimize optimize
Definition:
optimize.cpp:5
t_optimize::vparm
realnum vparm[LIMEXT][LIMPAR]
Definition:
optimize.h:188
t_optimize::chVarFmt
char chVarFmt[LIMPAR][FILENAME_PATH_LENGTH_2]
Definition:
optimize.h:263
EXIT_FAILURE
#define EXIT_FAILURE
Definition:
cddefines.h:140
Parser::NoNumb
NORETURN void NoNumb(const char *chDesc) const
Definition:
parser.cpp:233
Parser
Definition:
parser.h:31
cddefines.h
Illuminate::SYMMETRIC
@ SYMMETRIC
Definition:
rfield.h:30
optimize.h
t_optimize::nvarxt
long int nvarxt[LIMPAR]
Definition:
optimize.h:194
t_rfield::Illumination
Illuminate::IlluminationType Illumination[LIMSPC]
Definition:
rfield.h:316
radius.h
cdEXIT
#define cdEXIT(FAIL)
Definition:
cddefines.h:434
Parser::lgEOL
bool lgEOL(void) const
Definition:
parser.h:98
t_optimize::varang
realnum varang[LIMPAR][2]
Definition:
optimize.h:198
t_rfield::lgBeamed
bool lgBeamed[LIMSPC]
Definition:
rfield.h:310
parser.h
t_optimize::lgOptimizeAsLinear
bool lgOptimizeAsLinear[LIMPAR]
Definition:
optimize.h:180
physconst.h
Illuminate::REVERSE
@ REVERSE
Definition:
rfield.h:30
t_optimize::nvfpnt
long int nvfpnt[LIMPAR]
Definition:
optimize.h:195
t_rfield::nShape
long int nShape
Definition:
rfield.h:322
phycon.h
geometry
t_geometry geometry
Definition:
geometry.cpp:5
t_rfield::OpticalDepthScaleFactor
realnum OpticalDepthScaleFactor[LIMSPC]
Definition:
rfield.h:314
iterations.h
stopcalc.h
input.h
DEBUG_ENTRY
#define DEBUG_ENTRY(funcname)
Definition:
cddefines.h:684
Generated by
1.8.17