コード例 #1
0
void stlb_k01(double tt[TETRA_V_NUM][VEC_SIZE], double tp[TRIPRISM_V_NUM][VEC_SIZE])
{
  set_tetra(tt);
  prStlTetra(tt, (char*)"Tetra01");

  set_triprism(tp, 2.0);
  prStlTriprism(tp, (char*)"Triprism01");
}
コード例 #2
0
ファイル: refinement.c プロジェクト: WeiLiPenguin/pymatgen
static void get_conventional_lattice(double lattice[3][3],
				     SPGCONST Spacegroup *spacegroup)
{
  int i, j;
  double metric[3][3];
  Pointgroup pointgroup;

  pointgroup = ptg_get_pointgroup(spacegroup->pointgroup_number);

  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      lattice[i][j] = 0;
    }
  }

  mat_get_metric(metric, spacegroup->bravais_lattice);

  debug_print("bravais lattice\n");
  debug_print_matrix_d3(spacegroup->bravais_lattice);
  debug_print("%s\n", spacegroup->setting);

  switch (pointgroup.holohedry) {
  case TRICLI:
    set_tricli(lattice, metric);
    break;
  case MONOCLI: /* b-axis is the unique axis. */
    set_monocli(lattice, metric);
    break;
  case ORTHO:
    set_ortho(lattice, metric);
    break;
  case TETRA:
    set_tetra(lattice, metric);
    break;
  case TRIGO:
    if (spacegroup->setting[0] == 'R') {
      set_rhomb(lattice, metric);
    } else {
      set_trigo(lattice, metric);
    }
    break;
  case HEXA:
    set_trigo(lattice, metric);
    break;
  case CUBIC:
    set_cubic(lattice, metric);
    break;
  case HOLOHEDRY_NONE:
    break;
  }
}
コード例 #3
0
ファイル: refinement.c プロジェクト: etp12/avogadro
static int get_conventional_lattice(double lattice[3][3],
                                    const Holohedry holohedry,
                                    SPGCONST double bravais_lattice[3][3])
{
    int i, j;
    double metric[3][3];

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            lattice[i][j] = 0;
        }
    }

    mat_get_metric(metric, bravais_lattice);

    switch (holohedry) {
    case TRICLI:
        mat_copy_matrix_d3(lattice, bravais_lattice);
        break;
    case MONOCLI: /* b-axis is the unique axis. */
        set_monocli(lattice, metric);
        break;
    case ORTHO:
        set_ortho(lattice, metric);
        break;
    case TETRA:
        set_tetra(lattice, metric);
        break;
    case RHOMB:
        set_rhomb(lattice, metric);
        break;
    case TRIGO:
        set_trigo(lattice, metric);
        break;
    case HEXA:
        set_trigo(lattice, metric);
        break;
    case CUBIC:
        set_cubic(lattice, metric);
        break;
    case NONE:
        break;
    }

    return 1;
}
コード例 #4
0
void TransformPosition(char *label, FILE *fp){
  double trMat[VEC_SIZE][VEC_SIZE];
  double v0[VEC_SIZE], v1[VEC_SIZE], v2[VEC_SIZE], p[VEC_SIZE];

  AXIS axis = randCoordinateAxis();

  v0[0] = axis.x_axis.x;
  v0[1] = axis.x_axis.y;
  v0[2] = axis.x_axis.z;
  v0[3] = 0.0;
  v1[0] = axis.y_axis.x;
  v1[1] = axis.y_axis.y;
  v1[2] = axis.y_axis.z;
  v1[3] = 0.0;
  v2[0] = axis.z_axis.x;
  v2[1] = axis.z_axis.y;
  v2[2] = axis.z_axis.z;
  v2[3] = 0.0;
  p[0]  = axis.origin.x;
  p[1]  = axis.origin.y;
  p[2]  = axis.origin.z;
  p[3]  = 1.0;

  setMatCol4h(trMat, v0, v1, v2, p);

  if(strcmp(label, "Tetra") == 0){
    printf("四面体作ります\n");
    double tt[TETRA_V_NUM][VEC_SIZE], tranformedtt[TETRA_V_NUM][VEC_SIZE];
    set_tetra(tt);
    for (int i = 0; i < TETRA_V_NUM; ++i){
      mulMV4h(tranformedtt[i], trMat, tt[i]);
    }
    CombinationTetra(tranformedtt, fp);
  } else if(strcmp(label, "Triprism") == 0){
    printf("三角柱作ります\n");
    double tp[TRIPRISM_V_NUM][VEC_SIZE], tranformedtp[TRIPRISM_V_NUM][VEC_SIZE];
    set_triprism(tp, 2.0);
    for (int i = 0; i < TRIPRISM_V_NUM; ++i){
      mulMV4h(tranformedtp[i], trMat, tp[i]);
    }
    CombinationTriprism(tranformedtp, fp);
  }else{
    printf("ラベルが間違っている\n");
  }

}