diff options
Diffstat (limited to 'R/lossdistrib.c')
| -rw-r--r-- | R/lossdistrib.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/R/lossdistrib.c b/R/lossdistrib.c index 052fc6c2..74689653 100644 --- a/R/lossdistrib.c +++ b/R/lossdistrib.c @@ -772,25 +772,27 @@ void BClossdist(double *defaultprob, int *dim1, int *dim2, double alpha = 1;
double beta = 0;
- gshocked = Calloc((*dim1), double);
- Rshocked = Calloc((*dim1), double);
- Sshocked = Calloc((*dim1), double);
+ gshocked = malloc((*dim1) * (*n) * sizeof(double));
+ Rshocked = malloc((*dim1) * (*n) * sizeof(double));
+ Sshocked = malloc((*dim1) * (*n) * sizeof(double));
Lw = malloc((*N) * (*n) * sizeof(double));
Rw = malloc((*N) * (*n) * sizeof(double));
+
for(t=0; t < (*dim2); t++) {
memset(Lw, 0, (*N) * (*n) * sizeof(double));
memset(Rw, 0, (*N) * (*n) * sizeof(double));
+ #pragma omp parallel for private(j, g)
for(i=0; i < *n; i++){
for(j=0; j < (*dim1); j++){
g = defaultprob[j + (*dim1) * t];
- gshocked[j] = shockprob(g, rho[j], Z[i], 0);
- Sshocked[j] = shockseverity(1-recov[j], Z[i], rho[j], g);
- Rshocked[j] = 1 - Sshocked[j];
+ gshocked[j+(*dim1)*i] = shockprob(g, rho[j], Z[i], 0);
+ Sshocked[j+(*dim1)*i] = shockseverity(1-recov[j], Z[i], rho[j], g);
+ Rshocked[j+(*dim1)*i] = 1 - Sshocked[j];
}
- lossdistrib(gshocked, dim1, issuerweights, Sshocked, N, defaultflag,
+ lossdistrib_blas(gshocked + (*dim1) * i, dim1, issuerweights, Sshocked + (*dim1)*i, N, defaultflag,
Lw + i * (*N));
- lossdistrib(gshocked, dim1, issuerweights, Rshocked, N, defaultflag,
+ lossdistrib_blas(gshocked + (*dim1) * i, dim1, issuerweights, Rshocked + (*dim1)*i, N, defaultflag,
Rw + i * (*N));
}
dgemv_("n", N, n, &alpha, Lw, N, w, &one, &beta, L + t * (*N), &one);
|
