35
36
37
38#include "implicit_f.inc"
39
40
41
42 INTEGER, INTENT(in) :: N,NSPMD,NN,NVAR,ITTYP
43 TYPE(TH_WA_REAL), INTENT(in) ::WA_ELTYPE_P0
44 TYPE(TH_PROC_TYPE), INTENT(in) :: ELTYPE_STRUCT
45
46
47
48
49
50
51
52
53
54
55 LOGICAL :: BOOL
56 INTEGER :: I,J,K,II,IJK,LOCAL_SIZE
57 INTEGER :: NEXT,CURRENT,SIZE_N
58 INTEGER :: CURRENT_J,REST
59 my_real,
DIMENSION(:),
ALLOCATABLE :: wa_local
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 ALLOCATE( wa_local(nn*
nvar) )
77 wa_local(1:nn*
nvar) = zero
78
79
80
81 DO i=1,nspmd
82 local_size = eltype_struct%TH_PROC(i)%TH_ELM_SIZE
83 bool=.true.
84 DO k=1,local_size
85 IF(bool.EQV..true.) THEN
86 IF(eltype_struct%TH_PROC(i)%TH_ELM(k,2)==n) THEN
87 bool=.false.
88 ijk=k
89 ENDIF
90 ENDIF
91 ENDDO
92 IF(bool.EQV..false.) THEN
93 current = eltype_struct%TH_PROC(i)%TH_ELM(ijk,1)
94 next = eltype_struct%TH_PROC(i)%TH_ELM(ijk+1,1) ! index of
the next proc and n
95 size_n = next-current
96
97 rest = size_n / (
nvar+1)
98 ii = 0
99 DO k=1,rest
100 current_j = nint(wa_eltype_p0%WA_REAL( current+k*(
nvar+1) ) )
102 ii = ii + 1
103 wa_local(current_j+j) = wa_eltype_p0%WA_REAL(current+ii)
104 ENDDO
105 ii = ii + 1
106 ENDDO
107
108 ENDIF
109 ENDDO
110
111
112 CALL wrtdes(wa_local,wa_local,nn*
nvar,ittyp,1)
113
114 DEALLOCATE( wa_local )
115
116
117 RETURN
end diagonal values have been computed in the(sparse) matrix id.SOL
integer function nvar(text)
subroutine wrtdes(a, ia, l, iform, ir)