1
/* need to fix to add phase. should probably move most of code
2
** to a mitrush_blk_upd() function in C
4
void mitrush_update(CIvect &Cc, CIvect &Cl, CIvect &Sc, CIvect &Sl,
5
double norm, double acur, double alast)
7
double *ccptr, *clptr, *scptr, *slptr;
11
if (Cc.icore == 1 && Cl.icore == 1 && Sc.icore == 1 && Sl.icore == 1) {
13
for (blk=0; blk < Cc.num_blocks; blk++) {
14
cac = Cc.Ia_code[blk];
15
cbc = Cc.Ib_code[blk];
16
if (cac < cbc) continue;
18
len = Cc.Ia_size[blk] * Cc.Ib_size[blk];
19
ccptr = Cc.blocks[blk][0];
20
clptr = Cl.blocks[blk][0];
21
scptr = Sc.blocks[blk][0];
22
slptr = Sl.blocks[blk][0];
23
for (i=0; i<len; i++) {
24
ccptr[i] = norm * (acur * ccptr[i] + alast * clptr[i]);
25
scptr[i] = norm * (acur * scptr[i] + alast * slptr[i]);
27
for (i=0; i<H0block.size; i++) {
28
al = H0block.alplist[i];
29
bl = H0block.betlist[i];
30
ai = H0block.alpidx[i];
31
bi = H0block.betidx[i];
32
if (al == cac && bl == cbc) {
33
H0block.c0b[i] = Cc.blocks[blk][ai][bi];
34
H0block.s0b[i] = Sc.blocks[blk][ai][bi];
36
else if (al == cbc && bl == cac) {
37
H0block.c0b[i] = Cc.blocks[blk][bi][ai];
38
H0block.s0b[i] = Sc.blocks[blk][bi][ai];
43
len = Cc.Ia_size[blk] * Cc.Ib_size[blk];
44
ccptr = Cc.blocks[blk][0];
45
clptr = Cl.blocks[blk][0];
46
scptr = Sc.blocks[blk][0];
47
slptr = Sl.blocks[blk][0];
48
for (i=0; i<len; i++) {
49
ccptr[i] = norm * (acur * ccptr[i] + alast * clptr[i]);
50
scptr[i] = norm * (acur * scptr[i] + alast * slptr[i]);
52
for (i=0; i<H0block.size; i++) {
53
al = H0block.alplist[i];
54
bl = H0block.betlist[i];
55
ai = H0block.alpidx[i];
56
bi = H0block.betidx[i];
57
if (al == cac && bl == cbc) {
58
H0block.c0b[i] = Cc.blocks[blk][ai][bi];
59
H0block.s0b[i] = Sc.blocks[blk][ai][bi];
63
} /* end loop over blocks */
66
else { /* not Ms = 0 */
67
for (blk=0; blk < Cc.num_blocks; blk++) {
68
cac = Cc.Ia_code[blk];
69
cbc = Cc.Ib_code[blk];
70
len = Cc.Ia_size[blk] * Cc.Ib_size[blk];
71
ccptr = Cc.blocks[blk][0];
72
clptr = Cl.blocks[blk][0];
73
scptr = Sc.blocks[blk][0];
74
slptr = Sl.blocks[blk][0];
75
for (i=0; i<len; i++) {
76
ccptr[i] = norm * (acur * ccptr[i] + alast * clptr[i]);
77
scptr[i] = norm * (acur * scptr[i] + alast * slptr[i]);
79
for (i=0; i<H0block.size; i++) {
80
al = H0block.alplist[i];
81
bl = H0block.betlist[i];
82
ai = H0block.alpidx[i];
83
bi = H0block.betidx[i];
84
if (al == cac && bl == cbc) {
85
H0block.c0b[i] = Cc.blocks[blk][ai][bi];
86
H0block.s0b[i] = Sc.blocks[blk][ai][bi];
89
} /* end loop over blocks */
90
} /* end Ms != 0 case */
92
} /* end all in-core option */
94
printf("(mitrush_update): unrecognized icore option\n");