Slice

The Slice function allows graphing of a data set with three independent variables and one dependent variable.  The graph may be viewed in cross section as determined by functions of z which define the domain of the graph.  In addition, areas of the data set which map to values above (or below) a given threshold may be omitted, effectively "peeling" layers off of the data set.

For this application, the full Slice function has been modified.  The dependent variable values are coded in a color scheme which uses shades of red for progressively larger positive values, and shades of blue for progressively more negative values.  Positive values above the limit are mapped to white, while negative values below the limit are mapped to black.

Off[General::spell];

Color[f_,lm_]:=If[f>=0,
				If[f<=lm,RGBColor[f/lm,0,0],
						RGBColor[1,1,1]],
				If[f>=-lm,RGBColor[0,0,-f/lm],
						CMYKColor[0,0,0,1]]];

Options[Slice]={
			Resolution->{10,10,4},
			Limit->1.0,
			Omit->10.0};

Slice[f_,xp_List?(Function[v,Length[v]==2]),
		yp_List?(Function[v,Length[v]==2]),
		zp_List?(Function[v,Length[v]==2]),
		s___]:=Block[
	{r,lim,om,
	xl,xr,yl,yr,zl,zr,
	xinc,yinc,zinc,
	n,mx,my,txs,txe,tys,tye},
	
	r=Resolution/.{s}/.Options[Slice];
	lim=Limit/.{s}/.Options[Slice];
	om=Omit/.{s}/.Options[Slice];
	
	xl=N[xp[[1]]];
	xr=N[xp[[2]]];
	yl=N[yp[[1]]];
	yr=N[yp[[2]]];
	zl=N[zp[[1]]];
	zr=N[zp[[2]]];
	
	xinc=N[(xr-xl)/(r[[1]]-1)];
	yinc=N[(yr-yl)/(r[[2]]-1)];
	n=N[r[[3]]];
	zinc=N[(zr-zl)/(n-1)];
	
	mx=N[(xr-xl)(n-1)/n];
	my=N[(yr-yl)(n-1)/n];
	
	Graphics3D[
		Flatten[
		Table[
		Table[(q=f[x+xinc/2,y+yinc/2,z];
			If[(q>-om)&&(q<om),
				{Color[q,lim],
				Polygon[{{x,y,z},
					{x+xinc,y,z},
					{x+xinc,y+yinc,z},
					{x,y+yinc,z}}]},
				Thickness[.001]]),
			{x,txs=N[xl],
				If[(txe=N[xr])>=txs,
					txe,txs],xinc},
			{y,tys=N[yl],
				If[(tye=N[yr])>=tys,
					tye,tys],yinc}],
		{z,zl,zr,zinc}]],
	Lighting->False]];

Body Heat

1. All heat currents are in W; thermal conductivities are given in W / cm K.  Areas are assumed to be in square centimeters.  Temperatures are in degreees Celsius.  Sweat loss is in g / s.  Latent heat of water is in J / g.  Exhalation assumes 1.3 L tidal volume and zero incoming relative humidity.

conduction[Ta_] := N[k Area (Ts[Ta] - Ta) / depth];

kair = .0002386;
kwater = .00586;
ktissue = .002093;
krubber = .00045*4.186;

convection[vel_, Ta_] := N[14.5 (10^-4) Area Sqrt[vel] (Ts[Ta] - Ta)];

radiation[Ta_] :=N[5.5 (10^-12) Area ((Ts[Ta]+273.15)^4 -
                                                        (Ta+273.15)^4)];

waste[speed_] := 781 (speed/9)^2;

Ts[Ta_] := 28.2 + 9 ((Ta - 9.5) / 25.5)^2;

Sweat[Ta_] := If[Ts[Ta]<30,0,1] 3.472 (10^-6) Area (Ts[Ta] - 30);

Exhale[speed_] := 0.000953 (15+(speed/9)20);

Lwater = 2427.88;

2.  Specify your surface area and mass in kg.  Define the function f to include all of the effects you want to model.  Use the slice graph to locate parameter ranges in which heat gains change to heat losses.  Decreasing limit will give more color detail to the graph, while decreasing omit will eliminate graph tiles on either side of the transition line.  The default values correspond to a two degree change in body temp over one hour.

Area = 12000;

k = kair;

depth = .3;

Mass = 70;

f[speed_,Ta_,vel_] := waste[speed] - Lwater Sweat[Ta] - conduction[Ta] -
				Lwater Exhale[speed] -
				convection[vel,Ta] - radiation[Ta];

Show[Slice[f,{0,9},{9.5,35},{0,9},
		Limit->1.98 Mass,
		Omit->1.98 Mass,
		Resolution->{10,25,10}],
	ViewPoint->{-2.516, -2.151, 0.703},
	Axes->True];

Show[Slice[f,{0,9},{9.5,35},{0,9},
		Limit->1.98 Mass,
		Omit->1.98 Mass,
		Resolution->{10,25,10}],
	ViewPoint->{2.187, 2.484, 0.703},
	Axes->True];

3. Graph the effects in the regions you identified using the slices above.  This example shows the waste heat in red, evaporative losses in blue, convective losses in green and conductive and radiative losses in black, all as a function of ambient temperature for a given exercise level (6 km / hr) and wind velocity (5 m / s).  Determine which effects dominate in both the heat loss and heat gain regions, looking for the dominance to change when the net heat current becomes negative.

Plot[{waste[6], Lwater (Sweat[Ta]+Exhale[6]), convection[5,Ta], 
              conduction[Ta]+radiation[Ta]}, 
        {Ta, 9.5, 35}, PlotStyle->
        {RGBColor[1,0,0], RGBColor[0,0,1], RGBColor[0,1,0], RGBColor[0,0,0]},
        PlotRange->All];

4. This example shows the above functions as functions of wind velocity for a given exercise level (6 km / hr) and ambient temperature (25 C).

Plot[{waste[6], Lwater (Sweat[25]+Exhale[6]), convection[vel,25], 
              conduction[25]+radiation[25]}, 
        {vel,0,9}, PlotStyle->
        {RGBColor[1,0,0], RGBColor[0,0,1], RGBColor[0,1,0], RGBColor[0,0,0]},
        PlotRange->All];

5. This example shows the above functions as functions of exercise level for a given wind velocity (5 m / s) and ambient temperature (25 C).

Plot[{waste[sp], Lwater (Sweat[25]+Exhale[sp]), convection[5,25], 
           conduction[25]+radiation[25]}, 
        {sp,0,9}, PlotStyle->
        {RGBColor[1,0,0], RGBColor[0,0,1], RGBColor[0,1,0], RGBColor[0,0,0]},
        PlotRange->All];