void MakeBorder() { int j, i; //prima riga i = 0; for (j = 0; j < sciara->cols; j++) if (calGet2Dr(sciara->model, sciara->substates->Sz, i, j) >= 0) { calSetCurrent2Db(sciara->model, sciara->substates->Mb, i, j, CAL_TRUE); if (active) calAddActiveCell2D(sciara->model, i, j); } //ultima riga i = sciara->rows - 1; for (j = 0; j < sciara->cols; j++) if (calGet2Dr(sciara->model, sciara->substates->Sz, i, j) >= 0) { calSetCurrent2Db(sciara->model, sciara->substates->Mb, i, j, CAL_TRUE); if (active) calAddActiveCell2D(sciara->model, i, j); } //prima colonna j = 0; for (i = 0; i < sciara->rows; i++) if (calGet2Dr(sciara->model, sciara->substates->Sz, i, j) >= 0) { calSetCurrent2Db(sciara->model, sciara->substates->Mb, i, j, CAL_TRUE); if (active) calAddActiveCell2D(sciara->model, i, j); } //ultima colonna j = sciara->cols - 1; for (i = 0; i < sciara->rows; i++) if (calGet2Dr(sciara->model, sciara->substates->Sz, i, j) >= 0) { calSetCurrent2Db(sciara->model, sciara->substates->Mb, i, j, CAL_TRUE); if (active) calAddActiveCell2D(sciara->model, i, j); } //il resto for (int i = 1; i < sciara->rows - 1; i++) for (int j = 1; j < sciara->cols - 1; j++) if (calGet2Dr(sciara->model, sciara->substates->Sz, i, j) >= 0) { for (int k = 1; k < sciara->model->sizeof_X; k++) if (calGetX2Dr(sciara->model, sciara->substates->Sz, i, j, k) < 0) { calSetCurrent2Db(sciara->model, sciara->substates->Mb, i, j, CAL_TRUE); if (active) calAddActiveCell2D(sciara->model, i, j); break; } } }
void simulationInitialize(struct CALModel2D* model) { //dichiarazioni unsigned int maximum_number_of_emissions = 0; //azzeramento dello step dell'AC sciara->step = 0; sciara->elapsed_time = 0; //determinazione numero massimo di passi for (unsigned int i = 0; i < sciara->emission_rate.size(); i++) if (maximum_number_of_emissions < sciara->emission_rate[i].size()) maximum_number_of_emissions = sciara->emission_rate[i].size(); //maximum_steps_from_emissions = (int)(emission_time/Pclock*maximum_number_of_emissions); sciara->parameters.effusion_duration = sciara->parameters.emission_time * maximum_number_of_emissions; //definisce il bordo della morfologia MakeBorder(); //calcolo a b (parametri viscosit�) c d (parametri resistenza al taglio) evaluatePowerLawParams(sciara->parameters.Pr_Tsol, sciara->parameters.Pr_Tvent, sciara->parameters.a, sciara->parameters.b); evaluatePowerLawParams(sciara->parameters.Phc_Tsol, sciara->parameters.Phc_Tvent, sciara->parameters.c, sciara->parameters.d); // updateVentsEmission(model); if (active) for (unsigned int k = 0; k < sciara->vent.size(); k++) { int xVent = sciara->vent[k].x(); int yVent = sciara->vent[k].y(); calAddActiveCell2D(model, yVent, xVent); } calUpdate2D(model); }
//transition function void s3hexErosion(struct CALModel2D* s3hex, int i, int j) { CALint s; CALreal d, p, erosion_depth; d = calGet2Dr(s3hex,Q.d,i,j); if (d > 0) { s = calGet2Di(s3hex,Q.s,i,j); if (s < -1) calSetCurrent2Di(s3hex,Q.s,i,j,s+1); if (s == -1) { calSetCurrent2Di(s3hex,Q.s,i,j,0); doErosion(s3hex,i,j,d); #ifdef ACTIVE_CELLS calAddActiveCell2D(s3hex,i,j); #endif } p = calGet2Dr(s3hex,Q.p,i,j); if (p > P.mt) { erosion_depth = p * P.pef; if (erosion_depth > d) erosion_depth = d; doErosion(s3hex,i,j,erosion_depth); } } }
void sciddicaTSimulationInit(struct CALModel2D* s3hex) { int i, j; //s3hex parameters setting P.adh = P_ADH; P.rl = P_RL; P.r = P_R; P.f = P_F; P.mt = P_MT; P.pef = P_PEF; // P.ltt = P_LTT; //initializing debris source calInitSubstate2Dr(s3hex, Q.h, 0); calInitSubstate2Dr(s3hex, Q.p, 0); #ifdef ACTIVE_CELLS for (i=0; i<s3hex->rows; i++) for (j=0; j<s3hex->columns; j++) if (calGet2Dr(s3hex,Q.h,i,j) > P.adh) { calAddActiveCell2D(s3hex,i,j); } #endif //Substates and active cells update calUpdate2D(s3hex); }
void sciddicaTSimulationInit(struct CALModel2D* s3hex) { int i, j, n; //s3hex parameters setting P.adh = P_ADH; P.rl = P_RL; P.r = P_R; P.f = P_F; P.mt = P_MT; P.pef = P_PEF; // P.ltt = P_LTT; //initializing substates calInitSubstate2Dr(s3hex, Q.h, 0); calInitSubstate2Dr(s3hex, Q.p, 0); for (n=0; n<s3hex->sizeof_X; n++) { calInitSubstate2Dr(s3hex, Q.fh[n], 0); calInitSubstate2Dr(s3hex, Q.fp[n], 0); } #ifdef ACTIVE_CELLS for (i=0; i<s3hex->rows; i++) for (j=0; j<s3hex->columns; j++) if (calGet2Dr(s3hex,Q.h,i,j) > P.adh) { calAddActiveCell2D(s3hex,i,j); } #endif }
void sciddicaT_simulation_init(struct CALModel2D* sciddicaT) { CALreal z, h; CALint i, j; //sciddicaT parameters setting P.r = P_R; P.epsilon = P_EPSILON; //sciddicaT source initialization for (i=0; i<sciddicaT->rows; i++) for (j=0; j<sciddicaT->columns; j++) { h = calGet2Dr(sciddicaT, Q.h, i, j); if ( h > 0.0 ) { z = calGet2Dr(sciddicaT, Q.z, i, j); calSetCurrent2Dr(sciddicaT, Q.z, i, j, z-h); #ifdef ACTIVE_CELLS //adds the cell (i, j) to the set of active ones calAddActiveCell2D(sciddicaT, i, j); #endif } } }
// SciddicaT simulation init function void sciddicaTSimulationInit(struct CALModel2D* host_CA) { CALreal z, h; CALint i, j; //initializing substates to 0 calInitSubstate2Dr(host_CA, Q.f[0], 0); calInitSubstate2Dr(host_CA, Q.f[1], 0); calInitSubstate2Dr(host_CA, Q.f[2], 0); calInitSubstate2Dr(host_CA, Q.f[3], 0); //sciddicaT parameters setting P.r = P_R; P.epsilon = P_EPSILON; //sciddicaT source initialization for (i = 0; i < host_CA->rows; i++) for (j = 0; j < host_CA->columns; j++) { h = calGet2Dr(host_CA, Q.h, i, j); if (h > 0.0) { z = calGet2Dr(host_CA, Q.z, i, j); calSet2Dr(host_CA, Q.z, i, j, z - h); #ifdef ACTIVE_CELLS //adds the cell (i, j) to the set of active ones calAddActiveCell2D(host_CA, i, j); #endif } } }