Commit 583eae0d authored by Pillai, Himanshu's avatar Pillai, Himanshu
Browse files

new Makefile for Kokkos and updated Evaluation table

parent a75f711d
Evaluation
================
| Tables | FORTRAN | C++ |
| -------------- |:-------------:| ------------: |
|:-------------:|:------------:|
| KERNEL |
|----------------|:-------------:|:------------:|
| DRIVER | FORTRAN | C++ |
|----------------|:-------------:|:------------:|
| FORTRAN | Works | Works |
| C++ | | Works |
| LEGION Fortran | N/A | 1 |
| LEGION C++ |Partially | Works |
| C++ | X | Works |
| LEGION Fortran | X | X |
| LEGION C++ | Partially | Works |
| KOKKOS Fortran | X | X |
| KOKKOS C++ | X | Debugging mode|
| CUDA | X | Debugging mode|
| OpenMP/OpenACC | Works | On it |
| FleCSI | N/A | On it |
| KOKKOS C++ | X | Works |
| CUDA | X | Debugging |
| OpenMP/OpenACC | N/A | N/A |
| FleCSI | N/A | Writing |
| Tpetra | N/A | N/A |
| HPX | N/A | N/A |
|----------------|:-------------:|:------------:|
SRCDIR = .
OBJECT = .
.PHONY: cc_fortran_wrappers cc_serial cc_kokkos fortran
.PHONY: cc_fortran_wrappers cc_serial cc_kokkos fortran cuda
default: all
all: cc_fortran_wrappers fortran cc_serial cc_kokkos
all: cc_fortran_wrappers fortran cc_serial cc_kokkos cuda
cc_fortran_wrappers: fortran
$(MAKE) -C cc_fortran_wrappers all
......@@ -19,15 +19,20 @@ cc_kokkos:
fortran:
$(MAKE) -C fortran all
cuda:
$(MAKE) -C cuda all
clean:
$(MAKE) -C cc clean
$(MAKE) -C fortran clean
$(MAKE) -C cuda clean
allclean:
$(MAKE) -C cc_serial clean
$(MAKE) -C cc_kokkos clean
$(MAKE) -C fortran clean
$(MAKE) -C cuda clean
......@@ -11,7 +11,7 @@ using namespace std;
namespace ELM {
template<typename Array_d>
void CanopyHydrology_SnowWater(const double& dtime,
void CanopyHydrology_SnowWater(const double& dtime,
const double& qflx_floodg,
const int& ltype,
const int& ctype,
......@@ -41,10 +41,10 @@ void CanopyHydrology_SnowWater(const double& dtime,
double& qflx_snow_h2osfc,
double& frac_sno_eff,
double& frac_sno)
{
{
//parameters
//parameters
double rpi=4.0e0*atan(1.0e0) ;
double tfrz=273.15;
double zlnd = 0.010;
......@@ -55,33 +55,38 @@ void CanopyHydrology_SnowWater(const double& dtime,
// real(r8), intent(inout), dimension(-nlevsno+1:0) :: t_soisno, frac_iceold
// real(r8), intent(inout), dimension(-nlevsno+1:0) :: dz, z, zi
//local variables
//local variables
double temp_intsnow, temp_snow_depth, z_avg, fmelt, dz_snowf, snowmelt ;
double newsnow, bifall, accum_factor, fsno_new, smr ;
int j ;
//apply gridcell flood water flux to non-lake columns
//apply gridcell flood water flux to non-lake columns
if (ctype != icol_sunwall && ctype != icol_shadewall) {
qflx_floodc = qflx_floodg; }
else{
qflx_floodc = 0.0;
}
//Determine snow height and snow water
//Determine snow height and snow water
//Use Alta relationship, Anderson(1976); LaChapelle(1961),
//U.S.Department of Agriculture Forest Service, Project F,
//Progress Rep. 1, Alta Avalanche Study Center:Snow Layer Densification.
//Use Alta relationship, Anderson(1976); LaChapelle(1961),
//U.S.Department of Agriculture Forest Service, Project F,
//Progress Rep. 1, Alta Avalanche Study Center:Snow Layer Densification.
qflx_snow_h2osfc = 0.0;
//set temporary variables prior to updating
//set temporary variables prior to updating
temp_snow_depth=snow_depth;
//save initial snow content
for(j = -nlevsno+1; j < snow_level; j++) {
swe_old[j] = 0.00;
}
for(j = snow_level+1; j < 0; j++) {
swe_old[j]=h2osoi_liq[j]+h2osoi_ice[j];
//save initial snow content
// for(j = -nlevsno+1; j < snow_level; j++) {
// swe_old[j] = 0.00;
// }
// for(j = snow_level+1; j < 0; j++) {
// swe_old[j]=h2osoi_liq[j]+h2osoi_ice[j];
// }
for(j = 0; j < nlevsno; j++) {
if(j < nlevsno+snow_level ) swe_old[j]=0.00;
else swe_old[j] = h2osoi_liq[j]+h2osoi_ice[j];
}
if (do_capsnow) {
......@@ -157,7 +162,7 @@ void CanopyHydrology_SnowWater(const double& dtime,
if(h2osno < 1.0) {
frac_sno=std::min(frac_sno,h2osno);
}
}
}
} else { //h2osno == 0
// initialize frac_sno and snow_depth when no snow present initially
......@@ -210,38 +215,38 @@ void CanopyHydrology_SnowWater(const double& dtime,
} else {
frac_sno_eff = 1.;
}
} else {
} else {
frac_sno_eff = 1.;
}
}
if (ltype==istwet && t_grnd>tfrz) {
if (ltype==istwet && t_grnd>tfrz) {
h2osno=0.;
snow_depth=0.;
}
}
//When the snow accumulation exceeds 10 mm, initialize snow layer
//Currently, the water temperature for the precipitation is simply set
//as the surface air temperature
//When the snow accumulation exceeds 10 mm, initialize snow layer
//Currently, the water temperature for the precipitation is simply set
//as the surface air temperature
newnode = 0 ; //flag for when snow node will be initialized
if (snow_level == 0 && qflx_snow_grnd_col > 0.00 && frac_sno*snow_depth >= 0.010) {
newnode = 1;
snow_level = -1;
dz[0] = snow_depth ; //meter
z[0] = -0.50*dz[0];
zi[-1] = -dz[0];
t_soisno[0] = min(tfrz, forc_air_temp) ; //K
h2osoi_ice[0] = h2osno ; //kg/m2
h2osoi_liq[0] = 0.0 ; //kg/m2
frac_iceold[0] = 1.0;
}
//The change of ice partial density of surface node due to precipitation.
//Only ice part of snowfall is added here, the liquid part will be added
//later.
dz[nlevsno-1] = snow_depth ; //meter
z[nlevsno-1] = -0.50*dz[nlevsno-1];
zi[nlevsno-2] = -dz[nlevsno-1];
t_soisno[nlevsno-1] = min(tfrz, forc_air_temp) ; //K
h2osoi_ice[nlevsno-1] = h2osno ; //kg/m2
h2osoi_liq[nlevsno-1] = 0.0 ; //kg/m2
frac_iceold[nlevsno-1] = 1.0;
}
//The change of ice partial density of surface node due to precipitation.
//Only ice part of snowfall is added here, the liquid part will be added
//later.
if (snow_level < 0 && newnode == 0) {
h2osoi_ice[snow_level+1] = h2osoi_ice[snow_level+1]+newsnow;
dz[snow_level+1] = dz[snow_level+1]+dz_snowf*dtime;
}
}
}
h2osoi_ice[nlevsno-1+snow_level+1] = h2osoi_ice[nlevsno-1+snow_level+1]+newsnow;
dz[nlevsno-1+snow_level+1] = dz[nlevsno-1+snow_level+1]+dz_snowf*dtime;
}
}
}
......@@ -18,13 +18,14 @@ FC_LIB_ROOT = /usr/lib/gcc/x86_64-linux-gnu/8 #/usr/local/Cellar/gcc/8.2.0/lib/g
# assumes you have a working c++ compiler
CC = g++
CPP_FLAGS += -g -Wall -Wshadow -std=c++11
CXXFLAGS += -g -Wall -Wshadow -std=c++11
STD_LIB_ROOT = /usr
# assumes you have a working CUDA
NVCC=nvcc
CUDA_FLAGS= -std=c++11 -c -arch=sm_60
CUDA_LIBS= -lopenblas -lpthread -lcudart -lcublas
CUDA_LIBDIRS=-L/usr/local/cuda-10.0/lib64
CUDA_LIBDIRS=/usr/local/cuda-10.0/lib64
CUDA_INCDIRS=-I/usr/local/cuda-10.0/include
......@@ -36,7 +37,8 @@ CUDA_INCDIRS=-I/usr/local/cuda-10.0/include
# linking flags
CC_LD_FLAGS += -L$(SRCDIR) -lelm -L$(NETCDF_ROOT) -lnetcdf -L$(STD_LIB_ROOT)/lib -lstdc++ -L$(FC_LIB_ROOT) -lgfortran
FC_LD_FLAGS += -L$(SRCDIR) -lelm -L$(NETCDF_ROOT) -lnetcdff
CUDA_LD_FLAGS += -L$(SRCDIR) -lelm -L$(NETCDF_ROOT) -lnetcdf -L$(CUDA_LIBDIRS) -lstdc++ -lopenblas -lpthread -lcudart -lcublas
CXX_LD_FLAGS += -L$(SRCDIR) -lelm -L$(NETCDF_ROOT) -lnetcdf
CUDA_LD_FLAGS += -L$(SRCDIR) -lelm -L$(NETCDF_ROOT) -lnetcdf -L$(CUDA_LIBDIRS) -lstdc++ -lpthread -lcudart -lcublas
#
# rules
......@@ -50,7 +52,7 @@ CUDA_LD_FLAGS += -L$(SRCDIR) -lelm -L$(NETCDF_ROOT) -lnetcdf -L$(CUDA_LIBDIRS) -
%.cc.o: %.cc
$(CC) $(CC_FLAGS) $(CPP_FLAGS) $(INC_FLAGS) -c $< -o $@
%.cpp.o: %.cpp
$(CC) $(CC_FLAGS) $(CPP_FLAGS) $(INC_FLAGS) -c $< -o $@
$(CC) $(CC_FLAGS) $(CXXFLAGS) $(INC_FLAGS) -c $< -o $@
%.cu.o: %.cu
$(NVCC) $(CUDA_FLAGS) $(INC_FLAGS) -c $< -o $@
......
......@@ -33,14 +33,14 @@ __global__ void CanopyHydrology_FracWet(const int& frac_veg_nosno,
template<typename Array_d>
__global__ void CanopyHydrology_SnowWater(const double& dtime,
__device__ void CanopyHydrology_SnowWater(const double& dtime,
const double& qflx_floodg,
const int& ltype,
const int& ctype,
const bool& urbpoi,
const bool& do_capsnow,
const int& oldfflag,
const double& forc_t,
const double& forc_air_temp,
const double& t_grnd,
const double& qflx_snow_grnd_col,
const double& qflx_snow_melt,
......@@ -49,15 +49,15 @@ __global__ void CanopyHydrology_SnowWater(const double& dtime,
double& snow_depth,
double& h2osno,
double& int_snow,
Array_d& swe_old,
Array_d& h2osoi_liq,
Array_d& h2osoi_ice,
Array_d& t_soisno,
Array_d& frac_iceold,
int& snl,
Array_d& dz,
Array_d& z,
Array_d& zi,
Array_d swe_old,
Array_d h2osoi_liq,
Array_d h2osoi_ice,
Array_d t_soisno,
Array_d frac_iceold,
int& snow_level,
Array_d dz,
Array_d z,
Array_d zi,
int& newnode,
double& qflx_floodc,
double& qflx_snow_h2osfc,
......
......@@ -4,21 +4,21 @@
#include "column_varcon.h"
#include "clm_varpar.h"
#include "clm_varctl.h"
#include "CanopyHydrology_cpp.hh"
#include "CanopyHydrology.cuh"
using namespace std;
namespace ELM {
template<typename Array_d>
void CanopyHydrology_SnowWater(const double& dtime,
__device__ void CanopyHydrology_SnowWater(const double& dtime,
const double& qflx_floodg,
const int& ltype,
const int& ctype,
const bool& urbpoi,
const bool& do_capsnow,
const int& oldfflag,
const double& forc_t,
const double& forc_air_temp,
const double& t_grnd,
const double& qflx_snow_grnd_col,
const double& qflx_snow_melt,
......@@ -27,15 +27,15 @@ void CanopyHydrology_SnowWater(const double& dtime,
double& snow_depth,
double& h2osno,
double& int_snow,
Array_d& swe_old,
Array_d& h2osoi_liq,
Array_d& h2osoi_ice,
Array_d& t_soisno,
Array_d& frac_iceold,
int& snl,
Array_d& dz,
Array_d& z,
Array_d& zi,
Array_d swe_old,
Array_d h2osoi_liq,
Array_d h2osoi_ice,
Array_d t_soisno,
Array_d frac_iceold,
int& snow_level,
Array_d dz,
Array_d z,
Array_d zi,
int& newnode,
double& qflx_floodc,
double& qflx_snow_h2osfc,
......@@ -77,11 +77,10 @@ void CanopyHydrology_SnowWater(const double& dtime,
//set temporary variables prior to updating
temp_snow_depth=snow_depth;
//save initial snow content
for(j = -nlevsno+1; j < snl; j++) {
swe_old[j] = 0.00;
}
for(j = snl+1; j < 0; j++) {
swe_old[j]=h2osoi_liq[j]+h2osoi_ice[j];
for(j = 0; j < nlevsno; j++) {
if(j < nlevsno+snow_level ) swe_old[j]=0.00;
else swe_old[j] = h2osoi_liq[j]+h2osoi_ice[j];
}
if (do_capsnow) {
......@@ -91,10 +90,10 @@ void CanopyHydrology_SnowWater(const double& dtime,
int_snow = 5.e2;
} else {
if (forc_t > tfrz + 2.) {
bifall=50. + 1.7*std::pow((17.0),1.5);
} else if (forc_t > tfrz - 15.) {
bifall=50. + 1.7*std::pow((forc_t - tfrz + 15.),1.5);
if (forc_air_temp > tfrz + 2.) {
bifall=50. + 1.7*pow((17.0),1.5);
} else if (forc_air_temp > tfrz - 15.) {
bifall=50. + 1.7*pow((forc_air_temp - tfrz + 15.),1.5);
} else {
bifall=50.;
}
......@@ -103,7 +102,7 @@ void CanopyHydrology_SnowWater(const double& dtime,
newsnow = (1. - frac_h2osfc) * qflx_snow_grnd_col * dtime;
// update int_snow
int_snow = std::max(int_snow,h2osno) ; //h2osno could be larger due to frost
int_snow = max(int_snow,h2osno) ; //h2osno could be larger due to frost
// snowmelt from previous time step * dtime
snowmelt = qflx_snow_melt * dtime;
......@@ -118,9 +117,9 @@ void CanopyHydrology_SnowWater(const double& dtime,
// first compute change from melt during previous time step
if(snowmelt > 0.) {
smr=std::min(1.,(h2osno)/(int_snow));
smr=min(1.,(h2osno)/(int_snow));
frac_sno = 1. - std::pow((acos(min(1.,(2.*smr - 1.)))/rpi),(n_melt)) ;
frac_sno = 1. - pow((acos(min(1.,(2.*smr - 1.)))/rpi),(n_melt)) ;
}
......@@ -130,8 +129,8 @@ void CanopyHydrology_SnowWater(const double& dtime,
frac_sno = fsno_new;
// reset int_snow after accumulation events
temp_intsnow= (h2osno + newsnow) / (0.5*(cos(rpi*std::pow((1.0-std::max(frac_sno,1e-6)),(1.0/n_melt))+1.0))) ;
int_snow = std::min(1.e8,temp_intsnow) ;
temp_intsnow= (h2osno + newsnow) / (0.5*(cos(rpi*pow((1.0-max(frac_sno,1e-6)),(1.0/n_melt))+1.0))) ;
int_snow = min(1.e8,temp_intsnow) ;
}
//====================================================================
......@@ -152,10 +151,10 @@ void CanopyHydrology_SnowWater(const double& dtime,
if (oldfflag == 1) {
// snow cover fraction in Niu et al. 2007
if(snow_depth > 0.0) {
frac_sno = tanh(snow_depth/(2.5*zlnd*std::pow((std::min(800.0,(h2osno+ newsnow)/snow_depth)/100.0),1.0)) ) ;
frac_sno = tanh(snow_depth/(2.5*zlnd*pow((min(800.0,(h2osno+ newsnow)/snow_depth)/100.0),1.0)) ) ;
}
if(h2osno < 1.0) {
frac_sno=std::min(frac_sno,h2osno);
frac_sno=min(frac_sno,h2osno);
}
}
......@@ -168,8 +167,8 @@ void CanopyHydrology_SnowWater(const double& dtime,
// make int_snow consistent w/ new fsno, h2osno
int_snow = 0. ;//reset prior to adding newsnow below
temp_intsnow= (h2osno + newsnow) / (0.5*(cos(rpi*std::pow((1.0-std::max(frac_sno,1e-6)),(1.0/n_melt)))+1.0));
int_snow = std::min(1.e8,temp_intsnow);
temp_intsnow= (h2osno + newsnow) / (0.5*(cos(rpi*pow((1.0-max(frac_sno,1e-6)),(1.0/n_melt)))+1.0));
int_snow = min(1.e8,temp_intsnow);
// update snow_depth and h2osno to be consistent with frac_sno, z_avg
if (subgridflag ==1 && !urbpoi) {
......@@ -181,7 +180,7 @@ void CanopyHydrology_SnowWater(const double& dtime,
if (oldfflag == 1) {
// snow cover fraction in Niu et al. 2007
if(snow_depth > 0.0) {
frac_sno = tanh(snow_depth/(2.5*zlnd*std::pow((std::min(800.0,newsnow/snow_depth)/100.0),1.0)) );
frac_sno = tanh(snow_depth/(2.5*zlnd*pow((min(800.0,newsnow/snow_depth)/100.0),1.0)) );
}
}
} else {
......@@ -223,24 +222,24 @@ void CanopyHydrology_SnowWater(const double& dtime,
//Currently, the water temperature for the precipitation is simply set
//as the surface air temperature
newnode = 0 ; //flag for when snow node will be initialized
if (snl == 0 && qflx_snow_grnd_col > 0.00 && frac_sno*snow_depth >= 0.010) {
if (snow_level == 0 && qflx_snow_grnd_col > 0.00 && frac_sno*snow_depth >= 0.010) {
newnode = 1;
snl = -1;
dz[0] = snow_depth ; //meter
z[0] = -0.50*dz[0];
zi[-1] = -dz[0];
t_soisno[0] = min(tfrz, forc_t) ; //K
h2osoi_ice[0] = h2osno ; //kg/m2
h2osoi_liq[0] = 0.0 ; //kg/m2
frac_iceold[0] = 1.0;
snow_level = -1;
dz[nlevsno-1] = snow_depth ; //meter
z[nlevsno-1] = -0.50*dz[nlevsno-1];
zi[nlevsno-2] = -dz[nlevsno-1];
t_soisno[nlevsno-1] = min(tfrz, forc_air_temp) ; //K
h2osoi_ice[nlevsno-1] = h2osno ; //kg/m2
h2osoi_liq[nlevsno-1] = 0.0 ; //kg/m2
frac_iceold[nlevsno-1] = 1.0;
}
//The change of ice partial density of surface node due to precipitation.
//Only ice part of snowfall is added here, the liquid part will be added
//later.
if (snl < 0 && newnode == 0) {
h2osoi_ice[snl+1] = h2osoi_ice[snl+1]+newsnow;
dz[snl+1] = dz[snl+1]+dz_snowf*dtime;
if (snow_level < 0 && newnode == 0) {
h2osoi_ice[snow_level+1] = h2osoi_ice[snow_level+1]+newsnow;
dz[snow_level+1] = dz[snow_level+1]+dz_snowf*dtime;
}
}
}
......
......@@ -25,7 +25,7 @@ def run_comparison(testname, full_message=False):
gold = np.loadtxt(fname_gold, skiprows=1)
except IOError:
print 'ERROR: cannot find gold file "%s", bad testname?'%fname_gold
return 'G '
return 'Error in the gold file '
# get my file
fname_mine = '%s.soln'%testname
......@@ -37,7 +37,7 @@ def run_comparison(testname, full_message=False):
mine = np.loadtxt(fname_mine, skiprows=1)
except IOError:
print 'ERROR: cannot find my file "%s", failed test run?'%fname_mine
return 'D '
return 'Error in my file '
# compare
try:
......@@ -46,7 +46,7 @@ def run_comparison(testname, full_message=False):
if full_message:
print ''
print 'Test: "%s" FAILED with error: "%r"'%(testname, err)
return 'E '
return 'Error in my file size '
if close:
return 'PASS '
......
......@@ -10,6 +10,7 @@
#include <iomanip>
#include <numeric>
#include <algorithm>
#include <assert.h>
#include "utils.hh"
#include "readers.hh"
......
......@@ -9,7 +9,7 @@
#include <vector>
#include <iostream>
#include <iomanip>
#include <assert.h>
#include "utils.hh"
#include "readers.hh"
......
......@@ -10,6 +10,7 @@
#include <iomanip>
#include <numeric>
#include <algorithm>
#include <assert.h>
#include "utils.hh"
#include "readers.hh"
......@@ -220,7 +221,7 @@ int main(int argc, char ** argv)
auto avg_frac_sfc = std::accumulate(frac_h2osfc.begin(), frac_h2osfc.end(), 0.) / (frac_h2osfc.end() - frac_h2osfc.begin());
std::cout << std::setprecision(16)
<< 0 << "\t" << sum_water << "\t" << *min_max_water.first << "\t" << *min_max_water.second
<< t+1 << "\t" << sum_water << "\t" << *min_max_water.first << "\t" << *min_max_water.second
<< "\t" << sum_snow << "\t" << *min_max_snow.first << "\t" << *min_max_snow.second
<< "\t" << avg_frac_sfc << "\t" << *min_max_frac_sfc.first << "\t" << *min_max_frac_sfc.second << std::endl;
} // end timestep loop
......
......@@ -14,8 +14,8 @@
#include "readers.hh"
#include "CanopyHydrology_cpp.hh"
#include "CanopyHydrology_SnowWater_impl.hh"
#include "CanopyHydrology.cuh"
#include "CanopyHydrology_SnowWater_impl.cuh"
......@@ -127,7 +127,7 @@ int main(int argc, char ** argv)
auto frac_sno_eff = ELM::Utils::VectorColumn();
auto frac_sno = ELM::Utils::VectorColumn();
cudaDeviceSynchronize();
// std::cout << "Time\t Total Canopy Water\t Min Water\t Max Water" << std::endl;
// auto min_max = std::minmax_element(h2ocan.begin(), h2ocan.end());
// std::cout << std::setprecision(16)
......@@ -150,7 +150,7 @@ int main(int argc, char ** argv)
// NOTE: this currently punts on what to do with the qflx variables!
// Surely they should be either accumulated or stored on PFTs as well.
// --etc
ELM::CanopyHydrology_Interception(dtime,
ELM::CanopyHydrology_Interception<<<1, 256>>>(dtime,
forc_rain(t,g), forc_snow(t,g), forc_irrig(t,g),
ltype, ctype, urbpoi, do_capsnow,
elai(g,p), esai(g,p), dewmx, frac_veg_nosno,
......@@ -168,7 +168,7 @@ int main(int argc, char ** argv)
// By the PFT?
// --etc
double fwet = 0., fdry = 0.;
ELM::CanopyHydrology_FracWet(frac_veg_nosno, h2ocan(g,p), elai(g,p), esai(g,p), dewmx, fwet, fdry);
ELM::CanopyHydrology_FracWet<<<1, 256>>>(frac_veg_nosno, h2ocan(g,p), elai(g,p), esai(g,p), dewmx, fwet, fdry);
} // end PFT loop
// Column level operations
......@@ -182,7 +182,7 @@ int main(int argc, char ** argv)
//
// local outputs
int newnode;
ELM::CanopyHydrology_SnowWater(dtime, qflx_floodg,
ELM::CanopyHydrology_SnowWater<<<1, 256>>>(dtime, qflx_floodg,
ltype, ctype, urbpoi, do_capsnow, oldfflag,
forc_air_temp(t,g), t_grnd(g),
qflx_snow_grnd_col[g], qflx_snow_melt, n_melt, frac_h2osfc[g],
......@@ -196,7 +196,7 @@ int main(int argc, char ** argv)
// FIXME: Fortran black magic... h2osoi_liq is a vector, but the
// interface specifies a single double. For now passing the 0th
// entry. --etc
ELM::CanopyHydrology_FracH2OSfc(dtime, min_h2osfc, ltype, micro_sigma,
ELM::CanopyHydrology_FracH2OSfc<<<1, 256>>>(dtime, min_h2osfc, ltype, micro_sigma,
h2osno[g], h2osfc[g], h2osoi_liq[g][0], frac_sno[g], frac_sno_eff[g],
qflx_h2osfc2topsoi[g], frac_h2osfc[g]);
......
......@@ -4,11 +4,13 @@ SRCDIR = $(OBJECT)$(KERNEL_LANG)
include $(OBJECT)config/Makefile.config
INC_FLAGS = -I$(AMANZI_TPLS_DIR)/include -I../../src/cuda/ -I../tests_cuda
INC_FLAGS = -I$(AMANZI_TPLS_DIR)/include -I$(SRCDIR)
TESTS = test_CanopyHydrology_kern1_multiple
TESTS = test_CanopyHydrology_kern1_multiple \
test_CanopyHydrology_module