623 int iproc, ineigh, ielt, i, j, k;
624 int* i_buf, *ibuf_hexa_material_number, *ibuf_hexa_gnode_glonum;
625 proc_info_t* proc_tab;
627 int* nneighbor_all_kind;
628 int* cpu_neighbor_info;
629 int* ibuf_quadp_neighbor_hexa;
630 int* ibuf_quadp_neighbor_hexaface;
633 int icpu, iparax, ifsurf;
635 idx_t *p_eptr, *p_eind;
637 p_eptr = mesh->eptr_27;
638 p_eind = mesh->eind_27;
645 proc_tab = info->proc;
648 for(iproc = 0; iproc<mesh->npart; iproc++) {
651 for(ineigh = 0; ineigh<mesh->npart; ineigh++) {
652 if (proc_tab[iproc].connex[ineigh]) cpu_neighbor[icpu++] = ineigh;
656 i_buf = MALLOC(
int, proc_tab[iproc].nb_conn);
658 for(ineigh = 0; ineigh<mesh->npart; ineigh++) {
659 if (proc_tab[iproc].connex[ineigh]) i_buf[icpu++] = ineigh;
661 MPI_Send(i_buf, proc_tab[iproc].nb_conn, MPI_INT, iproc, 10, MPI_COMM_WORLD);
666 MPI_Recv(cpu_neighbor, ncpu_neighbor, MPI_INT, 0, 10, MPI_COMM_WORLD, &status);
669 for(iproc = 0; iproc<mesh->npart; iproc++) {
670 int nneighbor_all_kind = 0;
674 ibuf_hexa_material_number = MALLOC(
int, proc_tab[iproc].nb_elt);
675 ibuf_hexa_gnode_glonum = MALLOC(
int, proc_tab[iproc].nb_elt*mesh->num_nodes_hexa);
677 ibuf_quadp_neighbor_hexa = MALLOC(
int, proc_tab[iproc].nb_quad_p);
678 ibuf_quadp_neighbor_hexaface = MALLOC(
int, proc_tab[iproc].nb_quad_p);
680 i_buf = MALLOC(
int, 7*26*info->proc[iproc].nb_elt);
681 cpu_neighbor_info = MALLOC(
int, 3*26*info->proc[iproc].nb_ext);
687 for (ielt=0; ielt<proc_tab[iproc].nb_elt; ielt++) {
690 int ielt_num, ielt_number, ielt_face, ielt_edge, ielt_corner, ielt_coty, ielt_cpu;
692 elt_info_t* curhex = proc_tab[iproc].local_elts[ielt];
693 int globnum = curhex->globalnum;
696 if (iproc != 0) ibuf_hexa_material_number[ielt] = mesh->layer[globnum];
697 else ig_hexa_material_number[ielt] = mesh->layer[globnum];
700 for (i=0; i<mesh->num_nodes_hexa; i++) {
703 if (p_eind[p_eptr[globnum]+corner2efispec[i]-1] == 0) {
704 STOP(
"num node should not be 0 (fortran arrays start at 1)");
706 if (iproc != 0) ibuf_hexa_gnode_glonum[ielt * mesh->num_nodes_hexa + i] = p_eind[p_eptr[globnum]+corner2efispec[i]-1];
707 else ig_hexa_gnode_glonum[ielt * mesh->num_nodes_hexa + i] = p_eind[p_eptr[globnum]+corner2efispec[i]-1];
709 if (iproc == 0) mod_init_mesh_mp_init_gll_number_(&ihexa,ig_ngll_total);
712 for (i=0; i<NFACE; i++) {
715 int type = curhex->faces[i].type;
718 ielt_num = elt_tab[curhex->faces[i].num_neigh].localnum + 1;
719 ielt_face = face2efispec[curhex->faces[i].num_conn];
720 ielt_coty = curhex->faces[i].orientation;
721 ielt_cpu = mesh->part[curhex->faces[i].num_neigh];
722 if (ielt_cpu == iproc) {
723 if (iproc == 0) mod_init_mesh_mp_propagate_gll_nodes_face_(&ihexa, &iface, &ielt_num, &ielt_face, &ielt_coty);
725 i_buf[nb_items*7] = FACE*10+HEXA;
726 i_buf[nb_items*7+1] = ihexa;
727 i_buf[nb_items*7+2] = iface;
728 i_buf[nb_items*7+3] = ielt_num;
729 i_buf[nb_items*7+4] = ielt_face;
730 i_buf[nb_items*7+5] = ielt_coty;
731 i_buf[nb_items*7+6] = FACE;
736 if (*ig_nneighbor_all_kind >= 26*info->proc[iproc].nb_ext) STOP(
"ig_nneighbor_all_kind too large\n");
737 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 0] = ihexa;
738 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 1] = iface;
739 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 2] = ielt_cpu;
740 (*ig_nneighbor_all_kind)++;
742 if (nneighbor_all_kind >= 26*info->proc[iproc].nb_ext) STOP(
"nneighbor_all_kind too large\n");
743 cpu_neighbor_info[nneighbor_all_kind*3 + 0] = ihexa;
744 cpu_neighbor_info[nneighbor_all_kind*3 + 1] = iface;
745 cpu_neighbor_info[nneighbor_all_kind*3 + 2] = ielt_cpu;
746 nneighbor_all_kind++;
752 ig_quadp_neighbor_hexa[iparax] = ihexa;
753 ig_quadp_neighbor_hexaface[iparax] = iface;
755 ibuf_quadp_neighbor_hexa[iparax] = ihexa;
756 ibuf_quadp_neighbor_hexaface[iparax] = iface;
759 if (mesh->num_node_per_dim*mesh->num_node_per_dim == 4) {
761 case 1 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+0];
762 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+1];
763 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+2];
764 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+3];
766 case 2 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+0];
767 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+4];
768 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+5];
769 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+1];
771 case 3 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+1];
772 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+5];
773 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+6];
774 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+2];
776 case 4 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+3];
777 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+2];
778 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+6];
779 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+7];
781 case 5 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+0];
782 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+3];
783 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+7];
784 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+4];
786 case 6 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+4];
787 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+7];
788 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+6];
789 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+5];
793 STOP(
"not yet ready for 27 nodes elements\n");
798 if (iproc == 0) mod_init_mesh_mp_propagate_gll_nodes_quad_(&ihexa, &iface, &iparax, ig_quadp_gll_glonum, &info->proc[iproc].nb_quad_p);
800 i_buf[nb_items*7] = FACE*10+QUAD_P;
801 i_buf[nb_items*7+1] = ihexa;
802 i_buf[nb_items*7+2] = iface;
803 i_buf[nb_items*7+3] = iparax;
804 i_buf[nb_items*7+4] = 0;
805 i_buf[nb_items*7+5] = info->proc[iproc].nb_quad_p;
806 i_buf[nb_items*7+6] = FACE;
813 if (mesh->num_node_per_dim*mesh->num_node_per_dim == 4) {
815 case 1 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+0];
816 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+1];
817 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+2];
818 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+3];
820 case 2 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+0];
821 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+4];
822 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+5];
823 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+1];
825 case 3 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+1];
826 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+5];
827 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+6];
828 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+2];
830 case 4 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+3];
831 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+2];
832 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+6];
833 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+7];
835 case 5 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+0];
836 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+3];
837 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+7];
838 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+4];
840 case 6 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+4];
841 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+7];
842 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+6];
843 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*mesh->num_nodes_hexa+5];
847 STOP(
"not yet ready for 27 nodes elements\n");
852 if (iproc == 0) mod_init_mesh_mp_propagate_gll_nodes_quad_(&ihexa, &iface, &ifsurf, ig_quadf_gll_glonum, &info->proc->nb_quad_f);
854 i_buf[nb_items*7] = FACE*10+QUAD_F;
855 i_buf[nb_items*7+1] = ihexa;
856 i_buf[nb_items*7+2] = iface;
857 i_buf[nb_items*7+3] = ifsurf;
858 i_buf[nb_items*7+4] = 0;
859 i_buf[nb_items*7+5] = info->proc[iproc].nb_quad_f;
860 i_buf[nb_items*7+6] = FACE;
868 for (i=0; i<NEDGE; i++) {
870 conn_info* ptr = &curhex->edges[i];
871 int nb_neighbor = getnbneigh(EDGE, curhex, i);
872 for (
int ineigh = 0; ineigh < nb_neighbor; ineigh++) {
874 case HEXA : ielt_number = elt_tab[ptr->num_neigh].localnum + 1;
875 ielt_edge = edge2efispec[ptr->num_conn];
876 ielt_coty = ptr->orientation;
877 ielt_cpu = mesh->part[ptr->num_neigh];
878 if (ielt_cpu == iproc) {
879 if (ielt_number > ihexa) {
881 mod_init_mesh_mp_propagate_gll_nodes_edge_(&ihexa, &iedge, &ielt_number, &ielt_edge, &ielt_coty);
883 i_buf[nb_items*7] = EDGE*10+HEXA;
884 i_buf[nb_items*7+1] = ihexa;
885 i_buf[nb_items*7+2] = iedge;
886 i_buf[nb_items*7+3] = ielt_number;
887 i_buf[nb_items*7+4] = ielt_edge;
888 i_buf[nb_items*7+5] = ielt_coty;
889 i_buf[nb_items*7+6] = nb_neighbor;
895 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 0] = ihexa;
896 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 1] = NFACE + iedge;
897 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 2] = ielt_cpu;
898 (*ig_nneighbor_all_kind)++;
900 cpu_neighbor_info[nneighbor_all_kind*3 + 0] = ihexa;
901 cpu_neighbor_info[nneighbor_all_kind*3 + 1] = NFACE + iedge;
902 cpu_neighbor_info[nneighbor_all_kind*3 + 2] = ielt_cpu;
903 nneighbor_all_kind++;
907 default : STOP(
"edge neighbor should be an hexa");
913 for (j=0; j<NCORNER; j++) {
915 i = cornerefispec2cubit[j];
916 conn_info* ptr = &curhex->corners[i];
917 int nb_neighbor = getnbneigh(CORNER, curhex, i);
918 for (k=0; k<nb_neighbor; k++) {
920 case HEXA : ielt_number = elt_tab[ptr->num_neigh].localnum + 1;
921 ielt_corner = corner2efispec[ptr->num_conn];
922 ielt_cpu = mesh->part[ptr->num_neigh];
923 if (ielt_cpu == iproc) {
924 if (ielt_number > ihexa) {
926 mod_init_mesh_mp_propagate_gll_nodes_corner_(&ihexa, &inode, &ielt_number, &ielt_corner);
928 i_buf[nb_items*7] = CORNER*10+HEXA;
929 i_buf[nb_items*7+1] = ihexa;
930 i_buf[nb_items*7+2] = inode;
931 i_buf[nb_items*7+3] = ielt_number;
932 i_buf[nb_items*7+4] = ielt_corner;
933 i_buf[nb_items*7+5] = 0;
934 i_buf[nb_items*7+6] = nb_neighbor;
940 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 0] = ihexa;
941 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 1] = NFACE + NEDGE + inode;
942 ig_cpu_neighbor_info[*ig_nneighbor_all_kind*3 + 2] = ielt_cpu;
943 (*ig_nneighbor_all_kind)++;
945 cpu_neighbor_info[nneighbor_all_kind*3 + 0] = ihexa;
946 cpu_neighbor_info[nneighbor_all_kind*3 + 1] = NFACE + NEDGE + inode;
947 cpu_neighbor_info[nneighbor_all_kind*3 + 2] = ielt_cpu;
948 nneighbor_all_kind++;
952 default : STOP(
"corner neighbor should be an hexa");
959 if (iparax != info->proc[iproc].nb_quad_p || ifsurf != info->proc[iproc].nb_quad_f) STOP(
"problem with quad number");
962 MPI_Send(ibuf_hexa_material_number, proc_tab[iproc].nb_elt, MPI_INT, iproc, 21, MPI_COMM_WORLD);
963 MPI_Send(ibuf_hexa_gnode_glonum, proc_tab[iproc].nb_elt*mesh->num_nodes_hexa, MPI_INT, iproc, 22, MPI_COMM_WORLD);
964 MPI_Send(ibuf_quadp_neighbor_hexa, proc_tab[iproc].nb_quad_p, MPI_INT, iproc, 23, MPI_COMM_WORLD);
965 MPI_Send(ibuf_quadp_neighbor_hexaface, proc_tab[iproc].nb_quad_p, MPI_INT, iproc, 24, MPI_COMM_WORLD);
968 ibuf2[1] = nneighbor_all_kind;
969 MPI_Send(ibuf2, 2, MPI_INT, iproc, 25, MPI_COMM_WORLD);
971 MPI_Send(i_buf, nb_items*7, MPI_INT, iproc, 26, MPI_COMM_WORLD);
972 MPI_Send(cpu_neighbor_info, 3*nneighbor_all_kind, MPI_INT, iproc, 27, MPI_COMM_WORLD);
974 free(ibuf_hexa_material_number);
975 free(ibuf_hexa_gnode_glonum);
976 free(ibuf_quadp_neighbor_hexa);
977 free(ibuf_quadp_neighbor_hexaface);
979 free(cpu_neighbor_info);
983 i_buf = MALLOC(
int, 6*26*nhexa_local);
984 MPI_Recv(ig_hexa_material_number, nhexa_local, MPI_INT, 0, 21, MPI_COMM_WORLD, &status);
985 MPI_Recv(ig_hexa_gnode_glonum, nhexa_local*num_nodes_hexa, MPI_INT, 0, 22, MPI_COMM_WORLD, &status);
986 MPI_Recv(ig_quadp_neighbor_hexa, nquad_parax, MPI_INT, 0, 23, MPI_COMM_WORLD, &status);
987 MPI_Recv(ig_quadp_neighbor_hexaface, nquad_parax, MPI_INT, 0, 24, MPI_COMM_WORLD, &status);
989 MPI_Recv(ibuf2, 2, MPI_INT, 0, 25, MPI_COMM_WORLD, &status);
991 *ig_nneighbor_all_kind = nneighbor_all_kind = ibuf2[1];
993 MPI_Recv(i_buf, nb_items*7, MPI_INT, 0, 26, MPI_COMM_WORLD, &status);
994 MPI_Recv(ig_cpu_neighbor_info, 3*nneighbor_all_kind, MPI_INT, 0, 27, MPI_COMM_WORLD, &status);
996 for (ielt=0; ielt < nhexa_local; ielt++) {
999 mod_init_mesh_mp_init_gll_number_(&ihexa,ig_ngll_total);
1001 for (i=0; i<NFACE; i++) {
1003 if (i_buf[iibuf*7+6] == FACE && i_buf[iibuf*7+1] == ihexa && i_buf[iibuf*7+2] == iface) {
1004 int type = i_buf[iibuf*7];
1006 case FACE*10+HEXA : mod_init_mesh_mp_propagate_gll_nodes_face_(&i_buf[iibuf*7+1], &i_buf[iibuf*7+2], &i_buf[iibuf*7+3], &i_buf[iibuf*7+4], &i_buf[iibuf*7+5]);
1009 case FACE*10+QUAD_P : iparax = i_buf[iibuf*7+3]-1;
1010 assert(i_buf[iibuf*7+1]-1 == ielt);
1011 assert(i_buf[iibuf*7+2] == iface);
1013 case 1 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+0];
1014 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+1];
1015 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+2];
1016 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+3];
1018 case 2 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+0];
1019 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+4];
1020 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+5];
1021 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+1];
1023 case 3 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+1];
1024 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+5];
1025 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+6];
1026 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+2];
1028 case 4 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+3];
1029 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+2];
1030 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+6];
1031 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+7];
1033 case 5 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+0];
1034 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+3];
1035 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+7];
1036 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+4];
1038 case 6 : ig_quadp_gnode_glonum[iparax*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+4];
1039 ig_quadp_gnode_glonum[iparax*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+7];
1040 ig_quadp_gnode_glonum[iparax*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+6];
1041 ig_quadp_gnode_glonum[iparax*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+5];
1044 mod_init_mesh_mp_propagate_gll_nodes_quad_(&i_buf[iibuf*7+1], &i_buf[iibuf*7+2], &i_buf[iibuf*7+3], ig_quadp_gll_glonum, &i_buf[iibuf*7+5]);
1047 case FACE*10+QUAD_F : ifsurf = i_buf[iibuf*7+3]-1;
1048 assert(i_buf[iibuf*7+1]-1 == ielt);
1049 assert(i_buf[iibuf*7+2] == iface);
1051 case 1 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+0];
1052 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+1];
1053 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+2];
1054 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+3];
1056 case 2 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+0];
1057 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+4];
1058 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+5];
1059 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+1];
1061 case 3 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+1];
1062 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+5];
1063 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+6];
1064 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+2];
1066 case 4 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+3];
1067 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+2];
1068 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+6];
1069 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+7];
1071 case 5 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+0];
1072 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+3];
1073 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+7];
1074 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+4];
1076 case 6 : ig_quadf_gnode_glonum[ifsurf*4+0] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+4];
1077 ig_quadf_gnode_glonum[ifsurf*4+1] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+7];
1078 ig_quadf_gnode_glonum[ifsurf*4+2] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+6];
1079 ig_quadf_gnode_glonum[ifsurf*4+3] = ig_hexa_gnode_glonum[ielt*num_nodes_hexa+5];
1082 mod_init_mesh_mp_propagate_gll_nodes_quad_(&i_buf[iibuf*7+1], &i_buf[iibuf*7+2], &i_buf[iibuf*7+3], ig_quadf_gll_glonum, &i_buf[iibuf*7+5]);
1088 for (i=0; i<NEDGE; i++) {
1090 if (i_buf[iibuf*7] == EDGE*10+HEXA && i_buf[iibuf*7+1] == ihexa && i_buf[iibuf*7+2] == iedge) {
1091 int nb_neighbor = i_buf[iibuf*7+6];
1092 for (
int ineigh = 0; ineigh < nb_neighbor; ineigh++) {
1093 if (i_buf[iibuf*7] == EDGE*10+HEXA && i_buf[iibuf*7+1] == ihexa && i_buf[iibuf*7+2] == iedge) {
1094 mod_init_mesh_mp_propagate_gll_nodes_edge_(&i_buf[iibuf*7+1], &i_buf[iibuf*7+2], &i_buf[iibuf*7+3], &i_buf[iibuf*7+4], &i_buf[iibuf*7+5]);
1100 for (j=0; j<NCORNER; j++) {
1102 if (i_buf[iibuf*7] == CORNER*10+HEXA && i_buf[iibuf*7+1] == ihexa && i_buf[iibuf*7+2] == inode) {
1103 int nb_neighbor = i_buf[iibuf*7+6];
1104 for (
int ineigh = 0; ineigh < nb_neighbor; ineigh++) {
1105 if (i_buf[iibuf*7] == CORNER*10+HEXA && i_buf[iibuf*7+1] == ihexa && i_buf[iibuf*7+2] == inode) {
1106 mod_init_mesh_mp_propagate_gll_nodes_corner_(&i_buf[iibuf*7+1], &i_buf[iibuf*7+2], &i_buf[iibuf*7+3], &i_buf[iibuf*7+4]);
1114 assert(iibuf == nb_items);