blob: f43f9053ebf33aba69aeda083073de310dee6e4e [file] [log] [blame]
/*BHEADER****************************************************************
* (c) 2006 The Regents of the University of California *
* *
* See the file COPYRIGHT_and_DISCLAIMER for a complete copyright *
* notice and disclaimer. *
* *
*EHEADER****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "irsmk.h"
//--------------
// read input date
//--------------
void readInput(const char *filename)
{
FILE *fp;
if ((fp = fopen(filename, "r"))==NULL) {
printf("***** ERROR \n");
printf(" Cannot open input file: %s\n", filename);
exit(1);
}
fscanf(fp, "%d %d %d %d %d %d %d %d",
&kmin, &kmax, &jmin, &jmax, &imin, &imax, &kp, &jp);
printf("***** input \n");
printf("kmin = %8d kmax = %8d \n"
"jmin = %8d jmax = %8d \n"
"imin = %8d imax = %8d \n"
"kp = %8d jp = %8d \n \n \n",
kmin, kmax, jmin, jmax, imin, imax, kp, jp);
//-----
// set array size
//-----
i_lb = imin + jmin*jp + kmin*kp;
i_ub = (imax - 1) + (jmax -1)*jp + (kmax - 1)*kp + 1;
//-----
// sanity check for xdbl
//-----
if ((i_lb - kp - jp - 1) < 0) {
printf("***** ERROR \n");
printf(" lb of xdbl < 0 \n");
exit(1);
}
//-----
// in theory
// x_size = i_ub +
// kp + jp + 1 + // for xdbl
// kp + jp + 1 // for xufr
// I just add 10 elements for safety
//-----
x_size = i_ub + 2*(kp + jp + 1) + 10;
printf("***** array bounds \n");
printf("i_lb = %10d i_ub = %10d x_size = %10d \n \n \n",
i_lb, i_ub, x_size);
fclose(fp);
}
//--------------
// alloc memory
//--------------
void allocMem(RadiationData_t *rblk)
{
int size;
size = i_ub*sizeof(double);
rblk->dbl = (double *)malloc(size);
rblk->dbc = (double *)malloc(size);
rblk->dbr = (double *)malloc(size);
rblk->dcl = (double *)malloc(size);
rblk->dcc = (double *)malloc(size);
rblk->dcr = (double *)malloc(size);
rblk->dfl = (double *)malloc(size);
rblk->dfc = (double *)malloc(size);
rblk->dfr = (double *)malloc(size);
rblk->cbl = (double *)malloc(size);
rblk->cbc = (double *)malloc(size);
rblk->cbr = (double *)malloc(size);
rblk->ccl = (double *)malloc(size);
rblk->ccc = (double *)malloc(size);
rblk->ccr = (double *)malloc(size);
rblk->cfl = (double *)malloc(size);
rblk->cfc = (double *)malloc(size);
rblk->cfr = (double *)malloc(size);
rblk->ubl = (double *)malloc(size);
rblk->ubc = (double *)malloc(size);
rblk->ubr = (double *)malloc(size);
rblk->ucl = (double *)malloc(size);
rblk->ucc = (double *)malloc(size);
rblk->ucr = (double *)malloc(size);
rblk->ufl = (double *)malloc(size);
rblk->ufc = (double *)malloc(size);
rblk->ufr = (double *)malloc(size);
if ( (rblk->ufr)== NULL) printf("*****ERROR: allocMem out of memory \n");
}
//--------------
// init
//--------------
void init(Domain_t *domain, RadiationData_t *rblk, double *x, double *b )
{
int i;
domain->imin = imin;
domain->imax = imax;
domain->jmin = jmin;
domain->jmax = jmax;
domain->kmin = kmin;
domain->kmax = kmax;
domain->jp = jp;
domain->kp = kp;
double *dbl = rblk->dbl ;
double *dbc = rblk->dbc ;
double *dbr = rblk->dbr ;
double *dcl = rblk->dcl ;
double *dcc = rblk->dcc ;
double *dcr = rblk->dcr ;
double *dfl = rblk->dfl ;
double *dfc = rblk->dfc ;
double *dfr = rblk->dfr ;
double *cbl = rblk->cbl ;
double *cbc = rblk->cbc ;
double *cbr = rblk->cbr ;
double *ccl = rblk->ccl ;
double *ccc = rblk->ccc ;
double *ccr = rblk->ccr ;
double *cfl = rblk->cfl ;
double *cfc = rblk->cfc ;
double *cfr = rblk->cfr ;
double *ubl = rblk->ubl ;
double *ubc = rblk->ubc ;
double *ubr = rblk->ubr ;
double *ucl = rblk->ucl ;
double *ucc = rblk->ucc ;
double *ucr = rblk->ucr ;
double *ufl = rblk->ufl ;
double *ufc = rblk->ufc ;
double *ufr = rblk->ufr ;
for (i = 0 ; i < i_ub; i++ ) {
*b++ = 0.0;
*dbl++ = i;
*dbc++ = i+1;
*dbr++ = i+2;
*dcl++ = i+3;
*dcc++ = i+4;
*dcr++ = i+5;
*dfl++ = i+6;
*dfc++ = i+7;
*dfr++ = i+8;
*cbl++ = i+9;
*cbc++ = i+10;
*cbr++ = i+11;
*ccl++ = i+12;
*ccc++ = i+13;
*ccr++ = i+14;
*cfl++ = i+15;
*cfc++ = i+16;
*cfr++ = i+17;
*ubl++ = i+18;
*ubc++ = i+19;
*ubr++ = i+20;
*ucl++ = i+21;
*ucc++ = i+22;
*ucr++ = i+23;
*ufl++ = i+24;
*ufc++ = i+25;
*ufr++ = i+26;
}
for (i=0; i<x_size; ++i ) {
*x++ = 2.0*i;
}
}