1
/* Copyright (c) 1997 by Inria Lorraine. All Rights Reserved */
7
pvm_send envoie une var scilab
9
Pour chaque variable on envoie:
10
- n: size of the pack array
11
- p: pack array vect: (real,int)+
14
fleury - Nov 19, 1997: Created.
15
$Id: pvm_send.c,v 1.12 1998/04/03 11:41:02 fleury Exp $
21
#include "../machine.h"
22
#include "../stack-c.h"
24
#include "../calelm/sci_tools.h"
28
C2F(scipvmsend)(int *tids, int *p,
31
int *msgtag, int *res)
34
C2F(scipvmsend)(tids, p, pack, n, buff, msgtag, res)
51
(void) fprintf(stdout, "SEND: %d:%d:%d:%d:%d:%d:%p:%f:%f:%f:%f:%f:%f:%f\n",
52
*tids, *p, *n, *msgtag, pack[0], pack[1], buff,
53
buff[0], buff[1], buff[2], buff[3], buff[4], buff[5], buff[6]);
55
(void) fprintf(stderr, "SEND:");
56
for (i = 0; i < *n; ++i) {
57
(void) fprintf(stderr, "%3d:", pack[i]);
59
(void) fprintf(stderr, "\n");
62
bufid = pvm_initsend(PvmDataDefault);
64
(void) fprintf(stderr, "Error pvm_send - init: %d\n", bufid);
68
/* Pack the size of the packing vector */
69
info = pvm_pkint(n, 1, 1);
71
(void) fprintf(stderr, "Error pvm_send: -pack- %d\n", info);
76
/* Pack the packing vector */
77
info = pvm_pkint(pack, *n, 1);
79
(void) fprintf(stderr, "Error pvm_send: -pack- %d\n", info);
85
/* Pack the msg using the packing vector info */
87
ptr_int = (int*) buff;
89
for (i = 0; i < *n; i+=2) {
90
if (pack[i] > 0) { /* have to pack some int */
91
info = pvm_pkint(ptr_int, pack[i], 1);
93
(void) fprintf(stderr, "Error pvm_send: -pack- %d\n", info);
102
for (tmp_i = 0; tmp_i < pack[i]; ++tmp_i) {
103
(void) fprintf(stderr, "%d:", ptr_int[tmp_i]);
108
ptr_int += pack[i] + (pack[i] % 2);
109
ptr_double += ((pack[i]-1)/2 + 1);
111
if (pack[i+1] > 0) { /* have to pack some double */
112
info = pvm_pkdouble(ptr_double, pack[i+1], 1);
114
(void) fprintf(stderr, "Error pvm_send: -pack- %d\n", info);
123
for (tmp_i = 0; tmp_i < pack[i+1]; ++tmp_i) {
124
(void) fprintf(stderr, "%f:", ptr_double[tmp_i]);
129
ptr_int += (pack[i+1]*2);
130
ptr_double += pack[i+1];
135
(void) fprintf(stderr, "\n");
139
*res = pvm_send(tids[0], *msgtag);
142
*res = pvm_mcast(tids, *p, *msgtag);
149
C2F(scipvmsendvar)(int *tids, int *p, char *buff,
150
int *msgtag, int *res)
153
C2F(scipvmsendvar)(tids, p, buff, msgtag, res)
161
int info, bufid, type;
162
int mx, nx, type_x, ptr_x;
165
F2C(mycmatptr)(buff, &mx, &nx, &type_x, &ptr_x);
167
bufid = pvm_initsend(PvmDataDefault);
169
(void) fprintf(stderr, "Error pvm_send_var - init: %d\n", bufid);
174
info = pvm_pkint(&mx, 1, 1);
176
(void) fprintf(stderr, "Error pvm_send_var: -pack- %d\n", info);
181
info = pvm_pkint(&nx, 1, 1);
183
(void) fprintf(stderr, "Error pvm_send_var: -pack- %d\n", info);
188
if (type_x == TYPE_COMPLEX) {
190
info = pvm_pkint(&type, 1, 1);
192
(void) fprintf(stderr, "Error pvm_send_var: -pack- %d\n", info);
197
info = pvm_pkdcplx(stk(ptr_x), mx * nx, 1);
199
(void) fprintf(stderr, "Error pvm_send_var: -pack- %d\n", info);
206
info = pvm_pkint(&type, 1, 1);
208
(void) fprintf(stderr, "Error pvm_send_var: -pack- %d\n", info);
213
info = pvm_pkdouble(stk(ptr_x), mx * nx, 1);
215
(void) fprintf(stderr, "Error pvm_send_var: -pack- %d\n", info);
223
*res = pvm_send(tids[0], *msgtag);
225
*res = pvm_mcast(tids, *p, *msgtag);
226
} /* scipvmsendvar */