diff options
Diffstat (limited to 'R/lossdistrib.c')
| -rw-r--r-- | R/lossdistrib.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/R/lossdistrib.c b/R/lossdistrib.c index c336d254..8f4f0ccf 100644 --- a/R/lossdistrib.c +++ b/R/lossdistrib.c @@ -392,8 +392,8 @@ void lossdistrib_prepay_joint_Z(double *dp, double *pp, int *ndp, double *w, double *S, int *N, int *defaultflag, double *rho,
double *Z, double *wZ, int *nZ, double *q) {
int i, j;
- double* dpshocked = malloc(sizeof(double) * *ndp);
- double* ppshocked = malloc(sizeof(double) * *ndp);
+ double* dpshocked = malloc(sizeof(double) * (*ndp) * (*nZ));
+ double* ppshocked = malloc(sizeof(double) * (*ndp) * (*nZ));
int N2 = (*N) * (*N);
double* qmat = malloc(sizeof(double) * N2 * (*nZ));
@@ -401,13 +401,14 @@ void lossdistrib_prepay_joint_Z(double *dp, double *pp, int *ndp, double *w, double beta = 0;
int one = 1;
- #pragma omp parallel for private(j)
+#pragma omp parallel for private(j)
for(i = 0; i < *nZ; i++){
for(j = 0; j < *ndp; j++){
- dpshocked[j] = shockprob(dp[j], *rho, Z[i], 0);
- ppshocked[j] = shockprob(pp[j], *rho, -Z[i], 0);
+ dpshocked[j + (*ndp) * i] = shockprob(dp[j], *rho, Z[i], 0);
+ ppshocked[j + (*ndp) * i] = shockprob(pp[j], *rho, -Z[i], 0);
}
- lossdistrib_prepay_joint(dpshocked, ppshocked, ndp, w, S + *ndp *i, N, defaultflag, qmat + N2 * i);
+ lossdistrib_prepay_joint(dpshocked + (*ndp) * i, ppshocked + (*ndp) * i, ndp, w,
+ S + (*ndp) * i, N, defaultflag, qmat + N2 * i);
}
dgemv_("n", &N2, nZ, &alpha, qmat, &N2, wZ, &one, &beta, q, &one);
|
