cloudy  trunk
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 
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");
26  }
27 
29  // use chCard()+4 to make sure the command ILLUMINATE itself is not picked up
30  if( p.nMatch( "FORW" ) )
32  else if( p.nMatch( "REVE" ) )
34  else if( p.nMatch( "SYMM" ) )
36 
37  // isotropic case
38  if( p.nMatch( "ISOT" ) )
39  {
40  // isotropic illumination - following not meaningful
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" );
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 
71  (realnum)(1./cos(AngleIllumRadian));
72 
73  /* vary option */
74  if( optimize.lgVarOn )
75  {
76  /* no luminosity options on vary */
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;
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 
94  strcat( optimize.chVarFmt[optimize.nparm], " FORWARD" );
96  strcat( optimize.chVarFmt[optimize.nparm], " REVERSE" );
98  strcat( optimize.chVarFmt[optimize.nparm], " SYMMETRIC" );
99 
101  /* pointer to where to write */
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