Это огромный цикл до, и я приватизировал много переменных, чтобы избежать условий гонки.Но значения не совпадают с последовательным кодом, и я попытался распечатать proc_num и заметил, что из 8 активируются только 2 потока (0,1). Я хочу вставить весь код, но этослишком длинный.
ВЫХОД: код выполняется, но я получаю только неправильные значения, и только 0 и 1 печатаются для значения proc_num.
thread_num = 8
!$ call omp_set_num_threads (thread_num)
.
.
.
.
!$OMP parallel do private(A_inc,T_star_tr,temp33,B_alpha,C_alpha,C_alpha_vec,&
!$OMP del_CRSS,iter_out,iter_in,del_T_star_tau,RSS_alpha,&
!$OMP del_gam_tau,G_n,Schmid_dum,J_n, J_n_inv,correction,&
!$OMP check,EXP_N,CRSS_c_tau,temp12,checkouter,flag,Fp_det,Fe_det)
do vk=1,npts3
do vj=1,npts2
do vi=1,npts1
A_inc = 0.d0
do vii = 1,3
do vjj = 1,3
do vmm = 1,3
do vpp = 1,3
do voo = 1,3
A_inc(vii,vjj)= A_inc(vii,vjj) + Fp_inv_t(vmm,vii,vi,vj,vk)* &
F_tau(vpp,vmm,vi,vj,vk)*F_tau(vpp,voo,vi,vj,vk)*Fp_inv_t(voo,vjj,vi,vj,vk)
end do
end do
end do
end do
end do
!$OMP critical
!$ proc_num = omp_get_thread_num()
print *, proc_num, A_inc
!$OMP end critical
T_star_tr = 0.d0
do vii = 1,3
do vjj = 1,3
do vkk = 1,3
do vll = 1,3
T_star_tr(vii,vjj) = T_star_tr(vii,vjj) +&
Stiff_sam(vii,vjj,vkk,vll,vi,vj,vk)*0.5*(A_inc(vkk,vll) - IDEN_2(vkk,vll))
end do
end do
end do
end do
.
.
.