1 /*
2 symmetric source code
3 for the computation of the plethysm
4 h_I[S_J]
5 */
6
7 #include "def.h"
8 #include "macro.h"
9
plet_homsym_schur(a,b,c)10 INT plet_homsym_schur(a,b,c) OP a,b,c;
11 /* AK 051201 */
12 /* AK 210704 V3.0 */
13 {
14 INT erg = OK;
15 CTTTTO(HASHTABLE,INTEGER,PARTITION,HOMSYM,"plet_homsym_schur(1)",a);
16 CTTTO(HASHTABLE,PARTITION,SCHUR,"plet_homsym_schur(2)",b);
17 CTTTO(EMPTY,HASHTABLE,SCHUR,"plet_homsym_schur(3)",c);
18 #ifdef PLETTRUE
19 {
20 INT t=0; /* is 1 if transfer HASHTABLE->SCHUR necessary */
21
22 if (S_O_K(c) == EMPTY)
23 { t=1; init_hashtable(c); }
24
25 phs___(a,b,c,cons_eins);
26 if (t==1) t_HASHTABLE_SCHUR(c,c);
27 }
28 #endif
29 ENDR("plet_homsym_schur");
30 }
phs_ende()31 INT phs_ende()
32 {
33 INT erg = OK;
34 return erg;
35 }
36
37 #ifdef PLETTRUE
38 INT phs_integer_partition_();
39 INT phs_integer_hashtable_();
40 INT phs___();
41
phs_null__(b,c,f)42 INT phs_null__(b,c,f) OP b,c,f;
43 {
44 INT mxx_null__();
45 return mxx_null__(b,c,f);
46 }
47
phs_integer_hashtable_(a,b,c,f)48 INT phs_integer_hashtable_(a,b,c,f) OP a,b,c,f;
49 /* AK 061101 */
50 {
51 INT erg = OK;
52
53 CTO(INTEGER,"phs_integer_hashtable_(1)",a);
54 CTTO(HASHTABLE,SCHUR,"phs_integer_hashtable_(2)",b);
55 CTTO(SCHUR,HASHTABLE,"integer_hashtable_(3)",c);
56 NYI("phs_integer_hashtable_");
57
58 ENDR("phs_integer_hashtable_");
59 }
60
phs_integer__(a,b,c,f)61 INT phs_integer__(a,b,c,f) OP a,b,c; OP f;
62 /* AK 051201 */
63 {
64 INT erg = OK;
65
66 CTO(INTEGER,"phs_integer__(1)",a);
67 CTTTO(HASHTABLE,PARTITION,SCHUR,"phs_integer__(2)",b);
68 CTTO(HASHTABLE,SCHUR,"phs_integer__(3)",c);
69
70 SYMCHECK((S_I_I(a) < 0) , "phs_integer__:integer<0");
71
72 if (S_I_I(a) == 0) {
73 erg += phs_null__(b,c,f);
74 }
75
76 else if (S_O_K(b) == PARTITION)
77 erg += phs_integer_partition_(a,b,c,f);
78 else if (S_O_K(b) == SCHUR)
79 {
80 INT mss_hashtable_hashtable_();
81 INT p_schursum();
82 if (S_S_N(b) == NULL)
83 erg += phs_integer_partition_(a,S_S_S(b),c,f);
84 else
85 erg += p_schursum(a,b,c,f,NULL,phs_integer__,mss_hashtable_hashtable_);
86 }
87 else
88 {
89 erg += phs_integer_hashtable_(a,b,c,f);
90 }
91
92
93 ENDR("phs_integer__");
94 }
95
phs_partition__(a,b,c,f)96 INT phs_partition__(a,b,c,f) OP a,b,c; OP f;
97 {
98 INT erg = OK;
99 CTO(PARTITION,"phs_partition__(1)",a);
100 CTTTO(HASHTABLE,SCHUR,PARTITION,"phs_partition__(2)",b);
101 CTTO(HASHTABLE,SCHUR,"phs_partition__(3)",c);
102
103 if (S_PA_LI(a) == 0) {
104 erg += phs_null__(b,c,f);
105 goto ende;
106 }
107 else if (S_PA_LI(a) == 1) {
108 erg += phs_integer__(S_PA_I(a,0),b,c,f);
109 goto ende;
110 }
111 else{
112 INT p_splitpart();
113 INT mss_hashtable_hashtable_();
114 erg += p_splitpart(a,b,c,f,phs_partition__,
115 mss_hashtable_hashtable_);
116 goto ende;
117 }
118
119 ende:
120 CTTO(HASHTABLE,SCHUR,"phs_partition__(3)",c);
121 ENDR("phs_partition__");
122 }
123
124
125
phs_homsym__(a,b,c,f)126 INT phs_homsym__(a,b,c,f) OP a,b,c,f;
127 /* AK 051201 */
128 /* c += p_a [p_b] \times f */
129 {
130 INT erg = OK;
131 CTO(HOMSYM,"phs_homsym__(1)",a);
132 CTTTO(HASHTABLE,PARTITION,SCHUR,"phs_homsym__(2)",b);
133 CTTO(HASHTABLE,SCHUR,"phs_homsym__(3)",c);
134
135 M_FORALL_MONOMIALS_IN_A(a,b,c,f,phs_partition__);
136
137 ENDR("phs_homsym__");
138 }
139
phs_hashtable__(a,b,c,f)140 INT phs_hashtable__(a,b,c,f) OP a,b,c,f;
141 /* AK 051201 */
142 /* c += p_a [p_b] \times f */
143 {
144 INT erg = OK;
145 CTO(HASHTABLE,"phs_hashtable__(1)",a);
146 CTTTO(HASHTABLE,PARTITION,SCHUR,"phs_hashtable__(2)",b);
147 CTTO(HASHTABLE,SCHUR,"phs_hashtable__(3)",c);
148 M_FORALL_MONOMIALS_IN_A(a,b,c,f,phs_partition__);
149
150 CTTO(HASHTABLE,SCHUR,"phs_hashtable__(3-end)",c);
151 ENDR("phs_hashtable__");
152 }
153
phs_null_partition_(b,c,f)154 INT phs_null_partition_(b,c,f) OP b,c,f;
155 /* AK 061201 */
156 {
157 INT erg = OK;
158 CTO(PARTITION,"phs_null_partition(1)",b);
159 CTTO(SCHUR,HASHTABLE,"phs_null_partition(2)",c);
160 _NULL_PARTITION_(b,c,f);
161 ENDR("phs_null_partition");
162 }
163
phs_integer_partition_(a,b,c,f)164 INT phs_integer_partition_(a,b,c,f) OP a,b,c,f;
165 /* AK 051201 */
166 {
167 INT erg = OK;
168 INT cc_plet_phs_integer_partition();
169
170 CTO(INTEGER,"phs_integer_partition_(1)",a);
171 CTO(PARTITION,"phs_integer_partition_(2)",b);
172 CTTO(SCHUR,HASHTABLE,"phs_integer_partition_(3)",c);
173 SYMCHECK ((S_I_I(a) < 0),"phs_integer_partition_:integer<0");
174
175 if (S_I_I(a) == 0) {
176 erg += phs_null_partition_(b,c,f);
177 goto ende;
178 }
179
180 erg += cc_plet_phs_integer_partition(a,b,c,f);
181
182 ende:
183 ENDR("phs_integer_partition_");
184 }
185
186
187
phs___(a,b,c,f)188 INT phs___(a,b,c,f) OP a,b,c,f;
189 {
190 INT erg = OK;
191 CTTTTO(HASHTABLE,INTEGER,PARTITION,HOMSYM,"phs___(1)",a);
192 CTTTO(HASHTABLE,PARTITION,SCHUR,"phs___(2)",b);
193 CTTO(HASHTABLE,SCHUR,"phs___(3)",c);
194 if (S_O_K(a) == INTEGER)
195 {
196 erg += phs_integer__(a,b,c,f);
197 goto ende;
198 }
199 else if (S_O_K(a) == PARTITION)
200 {
201 erg += phs_partition__(a,b,c,f);
202 goto ende;
203 }
204 else if (S_O_K(a) == HOMSYM)
205 {
206 erg += phs_homsym__(a,b,c,f);
207 goto ende;
208 }
209 else /* if (S_O_K(a) == HASHTABLE) */
210 {
211 erg += phs_hashtable__(a,b,c,f);
212 goto ende;
213 }
214 ende:
215 CTTO(HASHTABLE,SCHUR,"phs___(3-end)",c);
216
217 ENDR("phs___");
218 }
219
220
221 #endif /* PLETTRUE */
222