// Start iteration: | for (m = 0; m < l; m++){ | count++; | update_Z(Z, y, TH, A, G, r)
; | update_TH(TH, THV, Z, A, G, r); | update_KSI_AR(KSI_array, Z, TH); | MPI_Gather (KSI_array, (2*k)+2, MPI_DOUBLE, KSI_rec, (2*k) + 2, MPI_DOUBLE, ROOT, MPI_COMM_WORLD); | if(rank == ROOT){ | double XX00=0.0; // XX00 = XX | double XX01=0.0; // XX01 = XX | double XZ00=0.0; // XZ0 = XZ0 | double XZ10=0.0; // XZ1 = XZ1 | // Retrieve x′x and x′Z from KSI_rec:: | for(i = 0; i < size; i++) { | XX00 += KSI_rec2*k+(2*k+2)*i; | XX01 += KSI_rec(2*k+1)+(2*k+2)*i; | } | gsl_matrix_set(XX, 0, 0, XX00); | gsl_matrix_set(XX, 0, 1, XX01); | gsl_matrix_set(XX, 1, 0, XX01); | gsl_matrix_set(XX, 1, 1, n); | for(j = 0; j < k; j++) { | XZ00=0.0; | XZ10=0.0; | for(i = 0; i < size; i++) { | XZ00 += KSI_rec; | XZ10 += KSI_rec; | } | gsl_matrix_set(XZ, 0, 0, XZ00); | gsl_matrix_set(XZ, 1, 0, XZ10); | } | update_A_G(A, G, AV, GV, XX, XZ, unif, count, r); | // Transfer A and G data into a buffer so that they can be broadcasted: | for(i = 0; i < k; i++){ | A_G_arrayi = gsl_vector_get(A, i); | A_G_arrayi+k = gsl_vector_get(G, i);} | } | MPI_Bcast(A_G_array, 2*k, MPI_DOUBLE, ROOT, MPI_COMM_WORLD); | // Transfer A and G received to a vector structure: | for(i = 0; i < k; i++){ | gsl_vector_set(A,i,A_G_arrayi); | gsl_vector_set(G,i,A_G_arrayi+k); | } | }// End iteration |
|