[R-sig-dyn-mod] Radial Diffusion with prescribed flux
Karline Soetaert
Karline.Soetaert at nioz.nl
Thu Feb 12 12:33:52 CET 2015
What I would do, is to implement this heat source as a regular source term, outside of the transport routine. Of course you then need to probably divide by the thickness of the first cell.
So,
dY <- tran.1D(C = Y, flux.down = flux.down, D = D.coeff, A = A, dx = xgrid)$dC # No flux.up!
dY[1] <-dY[1] + flux.up/xgrid$dx.int[1] # something like that...
Karline
-----Original Message-----
From: R-sig-dynamic-models [mailto:r-sig-dynamic-models-bounces at r-project.org] On Behalf Of cfriedalek .
Sent: dinsdag 10 februari 2015 11:25
To: Special Interest Group for Dynamic Simulation Models in R
Subject: Re: [R-sig-dyn-mod] Radial Diffusion with prescribed flux
Thanks Karline. So I think I need to consider the heated central zone as an infinitely long cylinder of finite radius rather than a line of zero radius. This would mimic the real situation of a heated slender wire in a domain.
I understand how I can specify a two zone grid where, say, the inner 1% of the total radius is the "wire" as follows:
xgrid <- setup.grid.1D(x.up = 0, x.down = c(0.01, 1), L=c(0.01, 0.99), N = c(1, 99))
Then setup the properties as before.
For constant diffusion coefficient of value 1:
r1 <- setup.prop.1D(grid = xgrid, func = function(r) r)
For different diffusion coefficients for wire and domain, say, 10 and 1
respectively:
D.coeffs <- c(10, 1)
wire_radius <- 0.01
r1 <- setup.prop.1D(grid = xgrid, func = function(r) r*D.coeffs[[(r >
wire_radius)+1]])
However now I am unclear how to proceed.
How do I specify a heat source that applies only to the inner zone of the grid? The heat source is a electrical resistance wire so the power generation is Volt^2/Resistance (Watts). I guess that must be done in the transport function but I'm not sure how. Also, do I need to specify the D parameter since it appears in the properties?
radial_diffusion <- function (t, Y, parms, A){
tran.1D(C = Y, flux.up = flux.up, flux.down = flux.down, D = D.coeff, A = A, dx = xgrid) # Add heat generation term for the wire zone }
I hope you can help.
Regards
Chris
PS: how to a achieve nice code layout in these posts. Compared to other posts it looks like I'm missing some part of CR/LF. I'm using R on Windows.
On Tue, Feb 10, 2015 at 5:50 AM, Karline Soetaert <Karline.Soetaert at nioz.nl>
wrote:
> Chris, the problem is that it multiplies the flux with 'A', the
> surface, and in your case, A at the origin = 0, so the flux vanishes
> (there is no surface to cross).
> Karline
>
> -----Original Message-----
> From: R-sig-dynamic-models [mailto:
> r-sig-dynamic-models-bounces at r-project.org] On Behalf Of cfriedalek .
> Sent: zaterdag 7 februari 2015 9:43
> To: r-sig-dynamic-models at r-project.org
> Subject: [R-sig-dyn-mod] Radial Diffusion with prescribed flux
>
> Hi
>
> Thanks for ReacTran and deSolve. To help my understanding I'm trying
> to simulate a line source heating problem in 1-D. Heat is generated
> along the central axis of an infinitely long cylinder of finite radius
> and diffuses radially to the exterior wall of the cylinder of radius
> R. I'm modelling this as a 1-D line along the radial (diffusion)
> direction with a prescribed, positive heat flux at the origin and an
> insulated exterior wall (zero heat flux). My code is shown below.
>
> The problem I'm having is that when I set a positive heat flux at r=0
> and zero heat flux at r=R the solver returns zero for the temperature
> (C) field at all times.
> However if I set a negative heat flux at r=R (heat flow into the
> cylinder) and zero at r=0 I get a sensible result (the wall
> temperature rises in time and eventually so too does the center
> temperature). I don't understand why this doesn't work for the case with heating in the center.
>
> Have I set this up properly?
>
> I'm really enjoying working with R and R-studio so even though I have
> solved this problem with other programming languages, I would really
> like to migrate to working with R. Getting my head around this is one
> step of the way. Ultimately I want to extend this to modelling a real
> line-source device with zones of different materials and electrical
> heating in the core, so any help is greatly appreciated.
>
> regards
>
> Chris
>
> # 1-D radial diffusion
> library(ReacTran)
> library(deSolve)
> N <- 10
> xgrid <- setup.grid.1D(N = N, L = 1)
> r1 <- setup.prop.1D(grid = xgrid, func = function(r) r) Yini <- rep(0,
> N) times <- seq(from = 0, to = 10, length.out = 101) D.coeff <- 0.05
> radial_diffusion <- function (t, Y, parms, A){
> tran.1D(C = Y, flux.up = flux.up, flux.down = flux.down, D =
> D.coeff, A = A, dx = xgrid) } # heating from outside - THIS WORKS
> flux.up <- 0 flux.down <- -1 # # heating from inside - THIS FAILS #
> flux.up <- 1 # flux.down <- 0 # solve
> out1 <- ode.1D(y = Yini, times = times, func = radial_diffusion, parms
> = NULL, nspec = 1, A = r1) # Plot Results par (mfrow=c(1, 2)) # time
> evolution at center "1" and wall "N"
> plot(out1[1:nrow(out1), "time"], out1[1:nrow(out1), as.character(N)],
> type = "l", lwd = 2,
> xlab = "time", ylab = "C", main = "Time Evolution")
> lines(out1[1:nrow(out1), "time"], out1[1:nrow(out1), as.character(1)])
>
> # radial distribution every 10 time steps plot(xgrid$x.mid, out1[1,
> 2:(N+1)], type = "l", lwd = 2, xlab = "r/R", ylab = "C",
> main = "Radial Distribution", ylim=c(0, max(out1[1:nrow(out1),
> as.character(N)])))
> time_indicies <- seq(1, length(times), by=10) for (i in time_indicies)
> lines(xgrid$x.mid, out1[i, 2:(N+1)]) par (mfrow=c(1, 1))
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-dynamic-models mailing list
> R-sig-dynamic-models at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-dynamic-models
>
> _______________________________________________
> R-sig-dynamic-models mailing list
> R-sig-dynamic-models at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-dynamic-models
>
[[alternative HTML version deleted]]
_______________________________________________
R-sig-dynamic-models mailing list
R-sig-dynamic-models at r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-dynamic-models
More information about the R-sig-dynamic-models
mailing list