Skip to content

Commit

Permalink
compatibility with extsting runs w/o moisture
Browse files Browse the repository at this point in the history
  • Loading branch information
janmandel committed Mar 4, 2012
1 parent 6c10a58 commit fe374d1
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 38 deletions.
4 changes: 2 additions & 2 deletions wrfv2_fire/Registry/registry.fire
Expand Up @@ -61,8 +61,8 @@ state real q2_old ij fire 1 z hr "Q2_OLD" "
state real psfc_old ij fire 1 z hr "PSFC_OLD" "previous value of accumulated rain" "mm"
state real fmoist_lasttime - fire - - hr "FMOIST_LASTTIME" "last time the moisture model was run" "s"
state real fmoist_nexttime - fire - - hr "FMOIST_NEXTTIME" "next time the moisture model will run" "s"
rconfig logical fmoist_run namelist,fire max_domains .true. hr "run moisture model (on the atmospheric grid), output to fmc_gc"
rconfig logical fmoist_interp namelist,fire max_domains .true. hr "interpolate moisture from the model or the input to fuels on the fire grid"
rconfig logical fmoist_run namelist,fire max_domains .false. hr "run moisture model (on the atmospheric grid), output to fmc_gc"
rconfig logical fmoist_interp namelist,fire max_domains .false. hr "interpolate moisture from the model or the input to fuels on the fire grid"
rconfig integer fmoist_freq namelist,fire max_domains 0 hr "fmoist_freq" "frequency to run moisture model 0: use fmoist_dt, k>0: every k timesteps" "1"
rconfig real fmoist_dt namelist,fire max_domains 600 hr "fmoist_dt " "moisture model time step" "s"
rconfig logical initialize_fmc namelist,fire max_domains .true. hr "initialize_fmc" "set initial moisture to fuelmc_g from namelist.fire"
Expand Down
4 changes: 2 additions & 2 deletions wrfv2_fire/phys/module_fr_sfire_driver.F
Expand Up @@ -70,7 +70,7 @@ module module_fr_sfire_driver

use module_fr_sfire_model, only: sfire_model
use module_fr_sfire_phys, only: fire_params, init_fuel_cats, set_fp_from_grid, fuel_moisture, &
advance_moisture, initialize_moisture_classes, moisture_classes
advance_moisture, initialize_moisture_classes, moisture_classes, fmoist_run, fmoist_interp
use module_fr_sfire_atm, only: apply_windrf,interpolate_wind2fire_height,interpolate_atm2fire, &
interpolate_z2fire,setup_wind_log_interpolation
use module_fr_sfire_util
Expand Down Expand Up @@ -136,7 +136,7 @@ subroutine sfire_driver_em ( grid , config_flags &
type(fire_params)::fp
real:: moisture_time

logical:: run_advance_moisture,run_fuel_moisture, fmoist_run, fmoist_interp, moisture_initializing
logical:: run_advance_moisture,run_fuel_moisture, moisture_initializing
real:: dt_moisture


Expand Down
83 changes: 49 additions & 34 deletions wrfv2_fire/phys/module_fr_sfire_phys.F
Expand Up @@ -32,7 +32,7 @@ module module_fr_sfire_phys
public:: fire_params

! variables
PUBLIC:: fire_wind_height,fcz0,fcwh,have_fuel_cats,nfuelcats,no_fuel_cat,windrf,moisture_classes
PUBLIC:: fire_wind_height,fcz0,fcwh,have_fuel_cats,nfuelcats,no_fuel_cat,windrf,moisture_classes,fmoist_run,fmoist_interp
! NOTE: fcwh and fcz0 are called fwh and fz0 in read/write statements


Expand All @@ -49,6 +49,7 @@ module module_fr_sfire_phys
integer, parameter::max_moisture_classes=5
!***

logical::fmoist_run,fmoist_interp
integer, parameter::zm=max_moisture_classes - 3
integer:: moisture_classes=3
real, dimension(max_moisture_classes):: drying_lag,wetting_lag,saturation_moisture,saturation_rain,rain_threshold
Expand Down Expand Up @@ -260,6 +261,7 @@ subroutine fuel_moisture( &
integer::ibs,ibe,jbs,jbe
character(len=128)::msg

if(.not.fmoist_interp)call crash('fuel_moisture should not be called because fmoist_interp not set?')

call check_mesh_2dim(ifts,ifte,jfts,jfte,ifds,ifde,jfds,jfde) ! check if fire tile fits into domain
call check_mesh_2dim(ifts,ifte,jfts,jfte,ifms,ifme,jfms,jfme) ! check if fire tile fits into memory
Expand Down Expand Up @@ -405,6 +407,8 @@ subroutine advance_moisture( &
call crash(msg)
endif

if(.not.fmoist_run)call crash('advance_moisture should not be called because fmoist_run not set?')

call print_2d_stats(its,ite,jts,jte,ims,ime,jms,jme,t2,'T2')
call print_2d_stats(its,ite,jts,jte,ims,ime,jms,jme,q2,'Q2')
call print_2d_stats(its,ite,jts,jte,ims,ime,jms,jme,psfc,'PSFC')
Expand Down Expand Up @@ -572,6 +576,7 @@ subroutine init_fuel_cats
integer:: i,j,k,ii,iounit,ierr,kk
character(len=128):: msg
REAL , DIMENSION( mfuelcats ) :: fwh, fz0
logical::fmoist
!*** executable

! read
Expand All @@ -585,6 +590,8 @@ subroutine init_fuel_cats
!$ if (OMP_GET_THREAD_NUM() .ne. 0)then
!$ call crash('init_fuel_cats: must be called from master thread')
!$ endif

fmoist = fmoist_run.or.fmoist_interp ! will deal with moisture

IF ( wrf_dm_on_monitor() ) THEN
! we are the master task
Expand All @@ -599,8 +606,10 @@ subroutine init_fuel_cats
if(ierr.ne.0)call crash('init_fuel_cats: error reading namelist fuel_scalars in file namelist.fire')
read(iounit,fuel_categories,iostat=ierr)
if(ierr.ne.0)call crash('init_fuel_cats: error reading namelist fuel_categories in file namelist.fire')
read(iounit,moisture,iostat=ierr)
if(ierr.ne.0)call crash('init_fuel_cats: error reading namelist moisture in file namelist.fire')
if(fmoist)then
read(iounit,moisture,iostat=ierr)
if(ierr.ne.0)call crash('init_fuel_cats: error reading namelist moisture in file namelist.fire')
endif
fmc_gw(1:mfuelcats,1)=fmc_gw01
fmc_gw(1:mfuelcats,2)=fmc_gw02
fmc_gw(1:mfuelcats,3)=fmc_gw03
Expand Down Expand Up @@ -694,8 +703,10 @@ subroutine init_fuel_cats
call message(msg)
write(msg,7)'no_fuel_cat',no_fuel_cat
call message(msg)
write(msg,7)'moisture_classes',moisture_classes
call message(msg)
if(fmoist)then
write(msg,7)'moisture_classes',moisture_classes
call message(msg)
endif

j=1
7 format(a,5(1x,i8,4x))
Expand Down Expand Up @@ -749,40 +760,44 @@ subroutine init_fuel_cats
call message(msg)
write(msg,8)'adjrs ',(adjrs(ii),ii=i,k)
call message(msg)
do kk=1,moisture_classes
write(msg,10)'fmc_gw',kk,(fmc_gw(ii,kk),ii=i,k)
call message(msg)
enddo
if(fmoist)then
do kk=1,moisture_classes
write(msg,10)'fmc_gw',kk,(fmc_gw(ii,kk),ii=i,k)
call message(msg)
enddo
endif
enddo
call message(' ')
call message('**********************************************************')

j=1
do i=1,moisture_classes,j
k=min(i+j-1,nfuelcats)
if(fmoist)then
j=1
do i=1,moisture_classes,j
k=min(i+j-1,nfuelcats)
call message(' ')
write(msg,7)'FUEL MOISTURE CLASS',(ii,ii=i,k)
call message(msg)
write(msg,9)'moisture class name',(trim(moisture_class_name(ii)),ii=i,k)
call message(msg)
write(msg,7)'drying_model ',(drying_model(ii),ii=i,k)
call message(msg)
write(msg,8)'drying_lag (h) ',(drying_lag(ii),ii=i,k)
call message(msg)
write(msg,7)'wetting_model ',(wetting_model(ii),ii=i,k)
call message(msg)
write(msg,8)'wetting_lag (h) ',(wetting_lag(ii),ii=i,k)
call message(msg)
write(msg,8)'saturation_moisture',(saturation_moisture(ii),ii=i,k)
call message(msg)
write(msg,8)'saturation_rain ',(saturation_rain(ii),ii=i,k)
call message(msg)
write(msg,8)'rain_threshold ',(rain_threshold(ii),ii=i,k)
call message(msg)
enddo
call message(' ')
write(msg,7)'FUEL MOISTURE CLASS',(ii,ii=i,k)
call message(msg)
write(msg,9)'moisture class name',(trim(moisture_class_name(ii)),ii=i,k)
call message(msg)
write(msg,7)'drying_model ',(drying_model(ii),ii=i,k)
call message(msg)
write(msg,8)'drying_lag (h) ',(drying_lag(ii),ii=i,k)
call message(msg)
write(msg,7)'wetting_model ',(wetting_model(ii),ii=i,k)
call message(msg)
write(msg,8)'wetting_lag (h) ',(wetting_lag(ii),ii=i,k)
call message(msg)
write(msg,8)'saturation_moisture',(saturation_moisture(ii),ii=i,k)
call message(msg)
write(msg,8)'saturation_rain ',(saturation_rain(ii),ii=i,k)
call message(msg)
write(msg,8)'rain_threshold ',(rain_threshold(ii),ii=i,k)
call message(msg)
enddo
call message(' ')
call message('**********************************************************')
call message(' ')
call message('**********************************************************')
call message(' ')
endif
have_fuel_cats=.true.

! and print to file
Expand Down

0 comments on commit fe374d1

Please sign in to comment.