blob: ad18b97b7e6f0541e4708617d9e62f88072f8ccb [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 <sys/time.h>
#include <time.h>
#include "Crystal.h"
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 Crystal_pow(int nSlip,
double slipRate[MS_XTAL_NSLIP_MAX]);
void Crystal_Cholesky(int nSlip,
double a[MS_XTAL_NSLIP_MAX][MS_XTAL_NSLIP_MAX],
double r[MS_XTAL_NSLIP_MAX],
double g[MS_XTAL_NSLIP_MAX]);
//--------------
// SPE driver
//--------------
double SPEdriver(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])
{
struct timeval t0, t1;
clock_t t0_cpu = 0,
t1_cpu = 0;
double del_wtime = 0.0;
double tmp;
#ifdef SMALL_PROBLEM_SIZE
const int noIter = 200000;
#else
const int noIter = 2000000;
#endif
int i = 0;
int j, k;
gettimeofday(&t0, ((void *)0));
t0_cpu = clock();
for (i=0; i<noIter; ++i) {
Crystal_div(MS_XTAL_NSLIP_MAX,
0.01,
slipRate,
dSlipRate,
tau,
tauc,
rhs,
dtcdgd,
dtdg,
matrix);
}
for (i=0; i<noIter; ++i) {
tmp = Crystal_pow(MS_XTAL_NSLIP_MAX,
slipRate);
}
for (i=0; i<MS_XTAL_NSLIP_MAX; i++){
for (j=0; j<MS_XTAL_NSLIP_MAX; j++)
matrix[i][j] = dtcdgd[i][j];
}
for (i=0; i<noIter; ++i) {
for (j=0; j<MS_XTAL_NSLIP_MAX; j++){
for (k=0; k<MS_XTAL_NSLIP_MAX; k++)
dtcdgd[j][k] = matrix[j][k];
}
Crystal_Cholesky(MS_XTAL_NSLIP_MAX,
dtcdgd,
tau,
rhs);
}
return tmp;
}