4 [in the order declared in subroutine cawfe]
6 ! 3D, DIMENSION( ims:ime,kms:kme,jms:jme )
7 ! u,v incoming atmos. winds (m/s at arakawa-c grid locations)
8 ! z height above sea level of mass points (m)
9 ! z_at_w height above sea level of w points (m)
10 ! rho incoming atmos. density (kg/m^3 at arakawa-c grid mass points)
11 ! dz8w delta z between w points (m)
12 ! 2D, DIMENSION( ims:ime, jms:jme )
13 ! mu topography (m abv sealvl)
14 ! zs height of surface above sea level (m)
17 ! rthfrten theta tendency due to fire induced heat flux divergence
18 ! rqvfrten Qv tendency due to fire induced moisture flux divergence
20 ! grnhfx heat flux from ground fire (W/m^2)
21 ! grnqfx moisture flux from ground fire (W/m^2)
22 ! canhfx heat flux from crown fire (W/m^2)
23 ! canqfx moisture flux from crown fire (W/m^2)
25 grndhx,grndqx,canhx,canqx are temporaries only
26 not passing them to the driver makes no difference
27 removed from cawfe argument list
31 subroutine fire_winds: physics atm grid midpoints -> atm grid corners
33 subroutine fire_topography atm grid topo -> fire grid
34 subroutine fire_startup: separated into operations on fire only
35 subroutine fire_ln: got rid of extra atm args
39 subroutine fire_init: got rid of some extra atm args (its and so on)
40 ditto fire_ds, fire_igs
41 nfrx, nfry: ratio atm/fire grid; no business in fire routines
42 took out of fire_startup, fire_stat, fire_ln, fire_ds, fire_igs
43 subroutine fire_burn_fcn: took extra atm args out
44 found use of atm grid in fire_init fire_tr
48 I have removed unnecesary atmospheric grid related arguments from all fire
49 routines. I have put back grnhfx,grnqfx,canhfx,canqfx on the argument list of
50 cawfee so that they are now passed to wrf, but wrf does not use them for
51 anything (I tested that).
53 Nothing I did so far should have resulted in any change to the code behavior,
54 the output from wrf.exe is still exactly the same.
56 The following subroutines still use the atm grid:
58 fire_winds despite the name does NOT interpolate to fire grid.
59 Instead it interpolates only from midpoints of mesh cells to corners on atmospheric grid.
61 fire_topography (a part of fire_startup I split off) interpolates terrain
62 height to arrays zf and zsf (fire grid). This is used only in one place, in
63 fire_tr to get "integer height of fuel". It is NOT used to determine the
66 fire_tr interpolates wind from corners of atmospheric grid only at the few points
67 it needs. It also uses wind at several grid heights and interpolates
68 gradient topography from atmospheric grid (array zs). The wind is never
69 interpolated to the whole fire grid. This is good for efficiency.
70 But the double interpolation (from midpoints to corners, then to selected points in fire_tr) can only decrease accuracy.
72 fire_init uses atmospheric grid numbers for unclear (historical) reasons.
74 fire_tendency needs to modify variables on the atm grid, of course.
76 fire_emissions has unclear function and is never called.
78 At some point in near future we'll have to decide where to draw the line to
79 isolate the fire model (=specify what the interface is) so that we can play
80 with a replacement. In particular we'll have to decide if to keep the
81 atmospheric grid in the fire model interface and in which form. At the moment
82 the atm grid is too tightly interwoven in the fire model and I cannot take it
83 out without probably changing model behavior by different rounding.
86 cawfe args kfds,kfde,kfms,kfme never used
87 all grids dimensioned in cells not nodes?
89 FR: mesh bounds on input to cawfe:
94 imfs -39 460 1 41 -39 460
96 atm/fire refinement ratio nfrx,nfry= 10 10
101 In the example I run I have
104 so that would appear that the 1st cell of atm grid covers the same
105 location as the first 10 cells of the fire grid, etc. (for simplicity
106 I will talk about i only, j is similar)
108 But all fire computation go from
109 if_st = MAX( (its-1)*nfrx+1, ids*nfrx+1 )
111 if_en = MIN( (ite)*nfrx , (ide-1)*nfrx )
112 and similarly for j. In this example this is from 11 to 410.
113 Why? Anything bad happens if I run computation everywhere? There is a
114 comment in the code about tiles and butting that I do not comprehend.
116 But when computing fluxes
117 DO 96 i = if_st+1,if_en-1 !start of I,J fuel grid physics
118 ib = INT(FLOAT((i-2)/nfrx+2)+ep)
120 where j=fire cell index, jb=atm cell index
121 for the low bound i=if_st+1=12 this gives (i-2)/nfrx+2=3 ib=3
122 the upper bound i=if_en-1=409 (i-2)/nfrx+2=42.7 ib=42
124 OK so the atmospheric grid is 1:42 by 1:42 (ids:ide,jds:jde)
125 so one would expect with ratio 10 the fire grid should be
127 assuming that for some reason one would want to solve on a smaller domain
128 then 11:410 on fire grid is 2:41 on atm grid
130 when we are passed 1:42 by 1:42 at domain and matching 1:420 by 1:420
131 fire domain, why don't we just compute with them but only with a part?
133 why is the summation on domain by 1 less on all sides?
136 ! cen_lat latitude of the center of the fire domain
137 ! cen_lon longitude of the center of the fire domain
138 how exactly is this center defined? The location of the center would be
139 different if index pair (i,j) is associated with a node and with center of grid
140 cell. I will assume the latter, and also that the grid meant here is from
144 !$OMP PARALLEL DO in module_cumulus_driver
146 #include "HALO.EM_A.inc"
149 commit 9e705d9f1ed7f95ff3783624c21dfde54fd7b338
150 added multiple ignitions (up to 5) via namelist.input
153 commit 22620cde191107c0c504cf898874a3f443d1a506
154 cleanup; moved continue_at_boundary to util, may be useful for winds also
158 commit 4ccd502e0682b9846b866b5639b0b61913bc4c2f
159 works on single tile, in out3
162 commit af413df0557a49ca56db20ff3436b14c7bccee21
163 fire nodes now midpoint, model_test seems to work, new ref
164 wrf coupling not finished yet
167 commit 18a2875c23df81453f8db8eea7c615f0b19c20b3
168 runs on 8 tiles, still same numbers as out6