@@ -255,10 +255,11 @@ void initialize_atmos(atmos_data_struct *atmos,
255
255
// nrerror("Input meteorological forcing files must contain either WIND (wind speed) or both WIND_N (north component of wind speed) and WIND_E (east component of wind speed); check input files\n");
256
256
257
257
/* Assign N_ELEM for veg-dependent forcings */
258
- param_set .TYPE [LAI_IN ].N_ELEM = veg_con [0 ].vegetat_type_num ;
259
- param_set .TYPE [VEGCOVER ].N_ELEM = veg_con [0 ].vegetat_type_num ;
260
- param_set .TYPE [ALBEDO ].N_ELEM = veg_con [0 ].vegetat_type_num ;
261
-
258
+ if (!options .OUTPUT_FORCE ) {
259
+ param_set .TYPE [LAI_IN ].N_ELEM = veg_con [0 ].vegetat_type_num ;
260
+ param_set .TYPE [VEGCOVER ].N_ELEM = veg_con [0 ].vegetat_type_num ;
261
+ param_set .TYPE [ALBEDO ].N_ELEM = veg_con [0 ].vegetat_type_num ;
262
+ }
262
263
/* compute number of simulation days */
263
264
tmp_starthour = 0 ;
264
265
tmp_endhour = 24 - global_param .dt ;
@@ -1421,172 +1422,174 @@ void initialize_atmos(atmos_data_struct *atmos,
1421
1422
}
1422
1423
}
1423
1424
1424
- /****************************************************
1425
- Albedo
1426
- ****************************************************/
1425
+ if (!options .OUTPUT_FORCE ) {
1427
1426
1428
- /* First, assign default climatology */
1429
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1430
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1431
- for (j = 0 ; j < NF ; j ++ ) {
1432
- veg_hist [rec ][v ].albedo [j ] = veg_lib [veg_con [v ].veg_class ].albedo [dmy [rec ].month - 1 ];
1427
+ /****************************************************
1428
+ Albedo
1429
+ ****************************************************/
1430
+
1431
+ /* First, assign default climatology */
1432
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1433
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1434
+ for (j = 0 ; j < NF ; j ++ ) {
1435
+ veg_hist [rec ][v ].albedo [j ] = veg_lib [veg_con [v ].veg_class ].albedo [dmy [rec ].month - 1 ];
1436
+ }
1433
1437
}
1434
1438
}
1435
- }
1436
1439
1437
- if (param_set .TYPE [ALBEDO ].SUPPLIED ) {
1438
- if (param_set .FORCE_DT [param_set .TYPE [ALBEDO ].SUPPLIED - 1 ] == 24 ) {
1439
- /* daily albedo provided */
1440
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1441
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1442
- sum = 0 ;
1443
- for (j = 0 ; j < NF ; j ++ ) {
1444
- hour = rec * global_param .dt + j * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1445
- if (global_param .starthour - hour_offset_int < 0 ) hour += 24 ;
1446
- idx = (int )((float )hour /24.0 );
1447
- if (local_veg_hist_data [ALBEDO ][v ][idx ] != NODATA_VH )
1448
- veg_hist [rec ][v ].albedo [j ] = local_veg_hist_data [ALBEDO ][v ][idx ]; // assume constant over the day
1449
- sum += veg_hist [rec ][v ].albedo [j ];
1440
+ if (param_set .TYPE [ALBEDO ].SUPPLIED ) {
1441
+ if (param_set .FORCE_DT [param_set .TYPE [ALBEDO ].SUPPLIED - 1 ] == 24 ) {
1442
+ /* daily albedo provided */
1443
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1444
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1445
+ sum = 0 ;
1446
+ for (j = 0 ; j < NF ; j ++ ) {
1447
+ hour = rec * global_param .dt + j * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1448
+ if (global_param .starthour - hour_offset_int < 0 ) hour += 24 ;
1449
+ idx = (int )((float )hour /24.0 );
1450
+ if (local_veg_hist_data [ALBEDO ][v ][idx ] != NODATA_VH )
1451
+ veg_hist [rec ][v ].albedo [j ] = local_veg_hist_data [ALBEDO ][v ][idx ]; // assume constant over the day
1452
+ sum += veg_hist [rec ][v ].albedo [j ];
1453
+ }
1454
+ if (NF > 1 ) veg_hist [rec ][v ].albedo [NR ] = sum / (float )NF ;
1450
1455
}
1451
- if (NF > 1 ) veg_hist [rec ][v ].albedo [NR ] = sum / (float )NF ;
1452
1456
}
1453
1457
}
1454
- }
1455
- else {
1456
- /* sub-daily albedo provided */
1457
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1458
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1459
- sum = 0 ;
1460
- for (i = 0 ; i < NF ; i ++ ) {
1461
- hour = rec * global_param .dt + i * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1462
- veg_hist [rec ][v ].albedo [i ] = 0 ;
1463
- while (hour < rec * global_param .dt + (i + 1 )* options .SNOW_STEP + global_param .starthour - hour_offset_int ) {
1464
- idx = hour ;
1465
- if (idx < 0 ) idx += 24 ;
1466
- if (local_veg_hist_data [ALBEDO ][v ][idx ] != NODATA_VH )
1467
- veg_hist [rec ][v ].albedo [i ] = local_veg_hist_data [ALBEDO ][v ][idx ];
1468
- hour ++ ;
1458
+ else {
1459
+ /* sub-daily albedo provided */
1460
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1461
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1462
+ sum = 0 ;
1463
+ for (i = 0 ; i < NF ; i ++ ) {
1464
+ hour = rec * global_param .dt + i * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1465
+ veg_hist [rec ][v ].albedo [i ] = 0 ;
1466
+ while (hour < rec * global_param .dt + (i + 1 )* options .SNOW_STEP + global_param .starthour - hour_offset_int ) {
1467
+ idx = hour ;
1468
+ if (idx < 0 ) idx += 24 ;
1469
+ if (local_veg_hist_data [ALBEDO ][v ][idx ] != NODATA_VH )
1470
+ veg_hist [rec ][v ].albedo [i ] = local_veg_hist_data [ALBEDO ][v ][idx ];
1471
+ hour ++ ;
1472
+ }
1473
+ sum += veg_hist [rec ][v ].albedo [i ];
1469
1474
}
1470
- sum += veg_hist [rec ][v ].albedo [i ] ;
1475
+ if ( NF > 1 ) veg_hist [rec ][v ].albedo [NR ] = sum / ( float ) NF ;
1471
1476
}
1472
- if (NF > 1 ) veg_hist [rec ][v ].albedo [NR ] = sum / (float )NF ;
1473
1477
}
1474
1478
}
1475
1479
}
1476
- }
1477
1480
1478
- /****************************************************
1479
- Leaf Area Index (LAI)
1480
- ****************************************************/
1481
+ /****************************************************
1482
+ Leaf Area Index (LAI)
1483
+ ****************************************************/
1481
1484
1482
- /* First, assign default climatology */
1483
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1484
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1485
- for (j = 0 ; j < NF ; j ++ ) {
1486
- veg_hist [rec ][v ].LAI [j ] = veg_lib [veg_con [v ].veg_class ].LAI [dmy [rec ].month - 1 ];
1485
+ /* First, assign default climatology */
1486
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1487
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1488
+ for (j = 0 ; j < NF ; j ++ ) {
1489
+ veg_hist [rec ][v ].LAI [j ] = veg_lib [veg_con [v ].veg_class ].LAI [dmy [rec ].month - 1 ];
1490
+ }
1487
1491
}
1488
1492
}
1489
- }
1490
1493
1491
- if (param_set .TYPE [LAI_IN ].SUPPLIED ) {
1492
- if (param_set .FORCE_DT [param_set .TYPE [LAI_IN ].SUPPLIED - 1 ] == 24 ) {
1493
- /* daily LAI provided */
1494
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1495
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1496
- sum = 0 ;
1497
- for (j = 0 ; j < NF ; j ++ ) {
1498
- hour = rec * global_param .dt + j * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1499
- if (global_param .starthour - hour_offset_int < 0 ) hour += 24 ;
1500
- idx = (int )((float )hour /24.0 );
1501
- if (local_veg_hist_data [LAI_IN ][v ][idx ] != NODATA_VH )
1502
- veg_hist [rec ][v ].LAI [j ] = local_veg_hist_data [LAI_IN ][v ][idx ]; // assume constant over the day
1503
- sum += veg_hist [rec ][v ].LAI [j ];
1494
+ if (param_set .TYPE [LAI_IN ].SUPPLIED ) {
1495
+ if (param_set .FORCE_DT [param_set .TYPE [LAI_IN ].SUPPLIED - 1 ] == 24 ) {
1496
+ /* daily LAI provided */
1497
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1498
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1499
+ sum = 0 ;
1500
+ for (j = 0 ; j < NF ; j ++ ) {
1501
+ hour = rec * global_param .dt + j * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1502
+ if (global_param .starthour - hour_offset_int < 0 ) hour += 24 ;
1503
+ idx = (int )((float )hour /24.0 );
1504
+ if (local_veg_hist_data [LAI_IN ][v ][idx ] != NODATA_VH )
1505
+ veg_hist [rec ][v ].LAI [j ] = local_veg_hist_data [LAI_IN ][v ][idx ]; // assume constant over the day
1506
+ sum += veg_hist [rec ][v ].LAI [j ];
1507
+ }
1508
+ if (NF > 1 ) veg_hist [rec ][v ].LAI [NR ] = sum / (float )NF ;
1504
1509
}
1505
- if (NF > 1 ) veg_hist [rec ][v ].LAI [NR ] = sum / (float )NF ;
1506
1510
}
1507
1511
}
1508
- }
1509
- else {
1510
- /* sub-daily LAI provided */
1511
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1512
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1513
- sum = 0 ;
1514
- for (i = 0 ; i < NF ; i ++ ) {
1515
- hour = rec * global_param .dt + i * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1516
- veg_hist [rec ][v ].LAI [i ] = 0 ;
1517
- while (hour < rec * global_param .dt + (i + 1 )* options .SNOW_STEP + global_param .starthour - hour_offset_int ) {
1518
- idx = hour ;
1519
- if (idx < 0 ) idx += 24 ;
1520
- if (local_veg_hist_data [LAI_IN ][v ][idx ] != NODATA_VH )
1521
- veg_hist [rec ][v ].LAI [i ] = local_veg_hist_data [LAI_IN ][v ][idx ];
1522
- hour ++ ;
1512
+ else {
1513
+ /* sub-daily LAI provided */
1514
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1515
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1516
+ sum = 0 ;
1517
+ for (i = 0 ; i < NF ; i ++ ) {
1518
+ hour = rec * global_param .dt + i * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1519
+ veg_hist [rec ][v ].LAI [i ] = 0 ;
1520
+ while (hour < rec * global_param .dt + (i + 1 )* options .SNOW_STEP + global_param .starthour - hour_offset_int ) {
1521
+ idx = hour ;
1522
+ if (idx < 0 ) idx += 24 ;
1523
+ if (local_veg_hist_data [LAI_IN ][v ][idx ] != NODATA_VH )
1524
+ veg_hist [rec ][v ].LAI [i ] = local_veg_hist_data [LAI_IN ][v ][idx ];
1525
+ hour ++ ;
1526
+ }
1527
+ sum += veg_hist [rec ][v ].LAI [i ];
1523
1528
}
1524
- sum += veg_hist [rec ][v ].LAI [i ] ;
1529
+ if ( NF > 1 ) veg_hist [rec ][v ].LAI [NR ] = sum / ( float ) NF ;
1525
1530
}
1526
- if (NF > 1 ) veg_hist [rec ][v ].LAI [NR ] = sum / (float )NF ;
1527
1531
}
1528
1532
}
1529
1533
}
1530
- }
1531
1534
1532
- /****************************************************
1533
- Fractional Vegetation Cover
1534
- ****************************************************/
1535
+ /****************************************************
1536
+ Fractional Vegetation Cover
1537
+ ****************************************************/
1535
1538
1536
- /* First, assign default climatology */
1537
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1538
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1539
- for (j = 0 ; j < NF ; j ++ ) {
1540
- veg_hist [rec ][v ].vegcover [j ] = veg_lib [veg_con [v ].veg_class ].vegcover [dmy [rec ].month - 1 ];
1539
+ /* First, assign default climatology */
1540
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1541
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1542
+ for (j = 0 ; j < NF ; j ++ ) {
1543
+ veg_hist [rec ][v ].vegcover [j ] = veg_lib [veg_con [v ].veg_class ].vegcover [dmy [rec ].month - 1 ];
1544
+ }
1541
1545
}
1542
1546
}
1543
- }
1544
1547
1545
- if (param_set .TYPE [VEGCOVER ].SUPPLIED ) {
1546
- if (param_set .FORCE_DT [param_set .TYPE [VEGCOVER ].SUPPLIED - 1 ] == 24 ) {
1547
- /* daily vegcover provided */
1548
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1549
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1550
- sum = 0 ;
1551
- for (j = 0 ; j < NF ; j ++ ) {
1552
- hour = rec * global_param .dt + j * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1553
- if (global_param .starthour - hour_offset_int < 0 ) hour += 24 ;
1554
- idx = (int )((float )hour /24.0 );
1555
- if (local_veg_hist_data [VEGCOVER ][v ][idx ] != NODATA_VH ) {
1556
- veg_hist [rec ][v ].vegcover [j ] = local_veg_hist_data [VEGCOVER ][v ][idx ]; // assume constant over the day
1557
- if (veg_hist [rec ][v ].vegcover [j ] < MIN_VEGCOVER ) veg_hist [rec ][v ].vegcover [j ] = MIN_VEGCOVER ;
1548
+ if (param_set .TYPE [VEGCOVER ].SUPPLIED ) {
1549
+ if (param_set .FORCE_DT [param_set .TYPE [VEGCOVER ].SUPPLIED - 1 ] == 24 ) {
1550
+ /* daily vegcover provided */
1551
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1552
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1553
+ sum = 0 ;
1554
+ for (j = 0 ; j < NF ; j ++ ) {
1555
+ hour = rec * global_param .dt + j * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1556
+ if (global_param .starthour - hour_offset_int < 0 ) hour += 24 ;
1557
+ idx = (int )((float )hour /24.0 );
1558
+ if (local_veg_hist_data [VEGCOVER ][v ][idx ] != NODATA_VH ) {
1559
+ veg_hist [rec ][v ].vegcover [j ] = local_veg_hist_data [VEGCOVER ][v ][idx ]; // assume constant over the day
1560
+ if (veg_hist [rec ][v ].vegcover [j ] < MIN_VEGCOVER ) veg_hist [rec ][v ].vegcover [j ] = MIN_VEGCOVER ;
1561
+ }
1562
+ sum += veg_hist [rec ][v ].vegcover [j ];
1558
1563
}
1559
- sum += veg_hist [rec ][v ].vegcover [j ] ;
1564
+ if ( NF > 1 ) veg_hist [rec ][v ].vegcover [NR ] = sum / ( float ) NF ;
1560
1565
}
1561
- if (NF > 1 ) veg_hist [rec ][v ].vegcover [NR ] = sum / (float )NF ;
1562
1566
}
1563
1567
}
1564
- }
1565
- else {
1566
- /* sub-daily vegcover provided */
1567
- for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1568
- for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1569
- sum = 0 ;
1570
- for (i = 0 ; i < NF ; i ++ ) {
1571
- hour = rec * global_param .dt + i * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1572
- veg_hist [rec ][v ].vegcover [i ] = 0 ;
1573
- while (hour < rec * global_param .dt + (i + 1 )* options .SNOW_STEP + global_param .starthour - hour_offset_int ) {
1574
- idx = hour ;
1575
- if (idx < 0 ) idx += 24 ;
1576
- if (local_veg_hist_data [VEGCOVER ][v ][idx ] != NODATA_VH ) {
1577
- veg_hist [rec ][v ].vegcover [i ] = local_veg_hist_data [VEGCOVER ][v ][idx ];
1578
- if (veg_hist [rec ][v ].vegcover [i ] < MIN_VEGCOVER ) veg_hist [rec ][v ].vegcover [i ] = MIN_VEGCOVER ;
1568
+ else {
1569
+ /* sub-daily vegcover provided */
1570
+ for (rec = 0 ; rec < global_param .nrecs ; rec ++ ) {
1571
+ for (v = 0 ; v < veg_con [0 ].vegetat_type_num ; v ++ ) {
1572
+ sum = 0 ;
1573
+ for (i = 0 ; i < NF ; i ++ ) {
1574
+ hour = rec * global_param .dt + i * options .SNOW_STEP + global_param .starthour - hour_offset_int ;
1575
+ veg_hist [rec ][v ].vegcover [i ] = 0 ;
1576
+ while (hour < rec * global_param .dt + (i + 1 )* options .SNOW_STEP + global_param .starthour - hour_offset_int ) {
1577
+ idx = hour ;
1578
+ if (idx < 0 ) idx += 24 ;
1579
+ if (local_veg_hist_data [VEGCOVER ][v ][idx ] != NODATA_VH ) {
1580
+ veg_hist [rec ][v ].vegcover [i ] = local_veg_hist_data [VEGCOVER ][v ][idx ];
1581
+ if (veg_hist [rec ][v ].vegcover [i ] < MIN_VEGCOVER ) veg_hist [rec ][v ].vegcover [i ] = MIN_VEGCOVER ;
1582
+ }
1583
+ hour ++ ;
1579
1584
}
1580
- hour ++ ;
1585
+ sum += veg_hist [ rec ][ v ]. vegcover [ i ] ;
1581
1586
}
1582
- sum += veg_hist [rec ][v ].vegcover [i ] ;
1587
+ if ( NF > 1 ) veg_hist [rec ][v ].vegcover [NR ] = sum / ( float ) NF ;
1583
1588
}
1584
- if (NF > 1 ) veg_hist [rec ][v ].vegcover [NR ] = sum / (float )NF ;
1585
1589
}
1586
1590
}
1587
1591
}
1588
1592
}
1589
-
1590
1593
/*************************************************
1591
1594
Cosine of Solar Zenith Angle
1592
1595
*************************************************/
0 commit comments