[go: up one dir, main page]

Menu

[r11]: / source / steady-state.c  Maximize  Restore  History

Download this file

121 lines (106 with data), 3.6 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* cooldt: A cool-down time calculator for multi-layers pipe
*
* Copyright 2010, 2013 Benjamin DEGLO DE BESSES. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY Benjamin DEGLO DE BESSES "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Benjamin DEGLO DE BESSES OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "cooldt.h"
/*
* Calculate linear system coefficients A, B, C & D
* based on alpha, beta and gamma for the steady state problem
*/
void SteadyStateSystem(PipeProblem *PP, PipeDicretize *PZ,
double *A, double *B, double *C, double *D)
{
int i ;
/*
* Set unused coefs. to 0
*/
for( i = 0 ; i < PP->NbCell[0] ; i++ )
{
A[i] = 0.0 ;
C[i] = 0.0 ;
B[i] = 0.0 ;
D[i] = 0.0 ;
}
/*
* First coef. corresponding to Tinitial temperature at fluid/solid interface
*/
i = PP->NbCell[0] ;
A[i] = 0.0 ;
B[i] = PZ->alphaSharp + PZ->gamma[i] ;
C[i] = - PZ->gamma[i] ;
D[i] = PZ->alphaSharp * PP->Tinitial ;
/*
* Solid layers coefs.
*/
for( i = (PP->NbCell[0] + 1) ; i < PZ->N ; i++ )
{
A[i] = - PZ->alpha[i] ;
B[i] = PZ->alpha[i] + PZ->gamma[i] ;
C[i] = - PZ->gamma[i] ;
D[i] = 0.0 ;
}
/*
* At the ambiant fluid / outer wall interface
*/
i = PZ->N ;
A[i] = - PZ->alpha[i] ;
B[i] = PZ->alpha[i] + PZ->gamma[i] ;
C[i] = 0.0 ;
D[i] = PZ->gamma[i] * PP->Tambient ;
}
/*
* Calculate steady state profile temperature
* return the result to *T
*/
void CalcSteadyState(PipeProblem *PP, PipeDicretize *PZ, double *T)
{
size_t DoublesSize = (PZ->N + 1) * sizeof(double) ;
double *A = (double*)malloc(DoublesSize) ;
double *B = (double*)malloc(DoublesSize) ;
double *C = (double*)malloc(DoublesSize) ;
double *D = (double*)malloc(DoublesSize) ;
int i;
/*
* Impose the initial fluid temperature to fluid cells
*/
for ( i = 0 ; i < PP->NbCell[0] ; i++ )
T[i] = PP->Tinitial ;
/*
* Calculate the system coeficient for the steady case state
*/
SteadyStateSystem(PP, PZ, A, B, C, D) ;
/*
* Solve the system for solid material ( PP->NbCell[0] = NumberOfFluidCells )
*/
TriDiagonalSolve(A, B, C, D, PP->NbCell[0], PZ->N, T) ;
/*
* Free local pointers
*/
free(A) ;
free(B) ;
free(C) ;
free(D) ;
}
/* End of steady-state.c*/