blob: 2a30e8ba71c0e8722e7453b14d425d8f52db88e1 [file] [log] [blame]
/*BHEADER****************************************************************
* (c) 2007 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 "Crystal.h"
//--------------
// test FDIV
//--------------
void Crystal_div(int nSlip,
double deltaTime,
double slipRate[MS_XTAL_NSLIP_MAX],
double dSlipRate[MS_XTAL_NSLIP_MAX],
double tau[MS_XTAL_NSLIP_MAX],
double tauc[MS_XTAL_NSLIP_MAX],
double rhs[MS_XTAL_NSLIP_MAX],
double dtcdgd[MS_XTAL_NSLIP_MAX][MS_XTAL_NSLIP_MAX],
double dtdg[MS_XTAL_NSLIP_MAX][MS_XTAL_NSLIP_MAX],
double matrix[MS_XTAL_NSLIP_MAX][MS_XTAL_NSLIP_MAX])
{
double bor_array[MS_XTAL_NSLIP_MAX];
double sgn[MS_XTAL_NSLIP_MAX];
double rateFact[MS_XTAL_NSLIP_MAX];
double tauN[MS_XTAL_NSLIP_MAX];
double err[MS_XTAL_NSLIP_MAX];
double rate_offset = 1.e-6;
double tauA = 30.;
double tauH = 1.2;
double rate_exp = 0.01;
double bor_s_tmp = 0.0;
int n = 0;
int m = 0;
for ( n = 0; n < nSlip; n++){
sgn[n] = 1.0;
rateFact[n] = 0.9 + (0.2 * n) / MS_XTAL_NSLIP_MAX;
}
//----MS_Xtal_PowerTay
for ( n = 0; n < nSlip; n++){
bor_array[n] = 1 / ( slipRate[n]*sgn[n] + rate_offset);
}
for ( n = 0; n < nSlip; n++){
tau[n] = tauA * rateFact[n] * sgn[n];
for ( m = 0; m < nSlip; m++)
dtcdgd[n][m] = tauH * deltaTime * rateFact[n];
dtcdgd[n][n] += tau[n] * rate_exp * sgn[n] * bor_array[n];
}
//-----MS_Xtal_SlipRateCalc
for (n = 0; n < nSlip; n++) {
bor_array[n] = 1/dtcdgd[n][n];
}
for (n = 0; n < nSlip; n++){
tauN[n] = tau[n];
for (m = 0; m < nSlip; m++){
bor_s_tmp = dtdg[n][m]* deltaTime;
tauN[n] += bor_s_tmp * dSlipRate[m] ;
matrix[n][m] = (-bor_s_tmp + dtcdgd[n][m])*bor_array[n];
}
err[n] = tauN[n] - tauc[n];
rhs[n] = err[n] * bor_array[n];
}
}