OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
my_orders.c File Reference
#include <stdio.h>
#include <stdlib.h>

Go to the source code of this file.

Macros

#define _FCALL

Functions

void tri_direct (unsigned *data, unsigned *iwork, unsigned *index, int n, int irecl, unsigned *inds)
void my_orders_ (int *mode, unsigned *iwork, unsigned *data, unsigned *index, int *n, int *irecl)
void _FCALL MY_ORDERS (int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
void my_orders (int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
void my_orders__ (int *mode, int *iwork, int *data, int *index, int *n, int *irecl)

Macro Definition Documentation

◆ _FCALL

#define _FCALL

Definition at line 26 of file my_orders.c.

Function Documentation

◆ MY_ORDERS()

void _FCALL MY_ORDERS ( int * mode,
int * iwork,
int * data,
int * index,
int * n,
int * irecl )

Definition at line 79 of file my_orders.c.

80{my_orders_(mode,(unsigned*)iwork,(unsigned*)data,(unsigned*)index,n,irecl);}
void my_orders_(int *mode, unsigned *iwork, unsigned *data, unsigned *index, int *n, int *irecl)
Definition my_orders.c:64
n

◆ my_orders()

void my_orders ( int * mode,
int * iwork,
int * data,
int * index,
int * n,
int * irecl )

Definition at line 82 of file my_orders.c.

83{my_orders_(mode,(unsigned*)iwork,(unsigned*)data,(unsigned*)index,n,irecl);}

◆ my_orders_()

void my_orders_ ( int * mode,
unsigned * iwork,
unsigned * data,
unsigned * index,
int * n,
int * irecl )

Definition at line 64 of file my_orders.c.

65{
66 int i;
67 if(*mode == 0){
68 for(i = 0 ;i < *n ; i++) index[i] = i ;
69 tri_direct(data,iwork,index,*n,*irecl,index+*n);
70 for(i = 0 ;i < *n ; i++) index[i] += 1 ;/* c => fortran */
71 } else if(*mode == 10){
72 for(i = 0 ;i < *n ; i++) index[i] -= 1 ;
73 tri_direct(data,iwork,index,*n,*irecl,index+*n);
74 for(i = 0 ;i < *n ; i++) index[i] += 1 ;/* c => fortran */
75 } else {
76 *mode = -1;
77 }
78}
void tri_direct(unsigned *data, unsigned *iwork, unsigned *index, int n, int irecl, unsigned *inds)
Definition my_orders.c:28

◆ my_orders__()

void my_orders__ ( int * mode,
int * iwork,
int * data,
int * index,
int * n,
int * irecl )

Definition at line 85 of file my_orders.c.

86{my_orders_(mode,(unsigned*)iwork,(unsigned*)data,(unsigned*)index,n,irecl);}

◆ tri_direct()

void tri_direct ( unsigned * data,
unsigned * iwork,
unsigned * index,
int n,
int irecl,
unsigned * inds )

Definition at line 28 of file my_orders.c.

29{
30 /* tri a adressage direct */
31 /* 0 <= x <= 2^16 - 1 */
32
33 unsigned range=65535,mask=0xffff;
34 int i,j,k;
35
36 for(k=irecl-1;k >= 0;k--){
37
38 /* poid faible (16bits)*/
39 for(i = 0 ;i < range+2 ; i++) iwork[i] = 0 ;
40 for(i = 0 ;i < n ; i++){
41 iwork[(data[irecl*index[i]+k] & mask) + 1] += 1 ;
42 }
43 for(i = 0 ;i < range ; i++) iwork[i+1] += iwork[i];
44 for(i = 0 ;i < n ; i++){
45 j = data[irecl*index[i]+k] & mask;
46 inds[iwork[j]] = index[i] ;
47 iwork[j] += 1;
48 }
49
50 /* poid fort (16bits)*/
51 for(i = 0 ;i < range+2 ; i++) iwork[i] = 0 ;
52 for(i = 0 ;i < n ; i++) {
53 iwork[((data[irecl*inds[i]+k] >> 16) & mask) + 1] += 1 ;
54 }
55 for(i = 0 ;i < range ; i++) iwork[i+1] += iwork[i];
56 for(i = 0 ;i < n ; i++){
57 j = (data[irecl*inds[i]+k] >> 16) & mask;
58 index[iwork[j]] = inds[i] ;
59 iwork[j] += 1;
60 }
61 }
62
63}