#include "global.h" //To compile : g++ AD.cxx -o {Input Executable Name} -lX11 //#include "Coeff.h" using namespace std; double RACAH(double A[6]){ double Racah = 0.; double ii[6],ix[6],kk[8]; double nn[4], nx[12],ny[8]; double K1,K2,K3,K4,K5,K6,K7,K8 = 0.; double NZMIN, NZMAX = .0; for(int i = 0;i<6;i++){ ii[i] = 2.0*A[i]; } double IA = ii[0]; double IB = ii[1]; double IC = ii[2]; double ID = ii[3]; double IE = ii[4]; double IF = ii[5]; K1 = IA + IB -IE; K3 = IC + ID -IE; K5 = IA + IC -IF; K7 = IB + ID -IF; K2 = IE - abs(IA-IB); K4 = IE - abs(IC-ID); K6 = IF - abs(IA-IC); K8 = IF - abs(IB-ID); double karr[8] = {K1,K2,K3,K4,K5,K6,K7,K8}; double kmn=karr[0]; double kmx=karr[0]; for(int i=0;i<8;i++) { if(kmn>karr[i]) { kmn=karr[i]; } else if(kmx 0){ break; } } double sgn1 = 1.; double KQ,IP,IQ,IT = 0.; if(Kmin == 1){ KQ = 7 - Kmin; IA = ix[(int)KQ-1]; ID = ix[Kmin+4-1]; IE = ix[Kmin-1]; IF = ix[(int)KQ-4-1]; if(((int)(IA+ID-IE-IF)/2 %2) != 0) {sgn1 = -1.;} }else if(Kmin == 2){ KQ = 7 - Kmin; IA = ix[(int)KQ-1]; ID = ix[Kmin+4-1]; IE = ix[Kmin-1]; IF = ix[(int)KQ-4-1]; if(((int)(IA+ID-IE-IF)/2 %2) != 0) {sgn1 = -1.;} }else if(Kmin == 3){ KQ = 9 - Kmin; IB = ix[(int)KQ-1]; IC = ix[Kmin+2-1]; IE = ix[Kmin-1]; IF = ix[(int)KQ -2-1]; if(((int)(IB+IC-IE-IF)/2)%2 !=0) {sgn1 = -1.;} }else if(Kmin == 4){ KQ = 9 - Kmin; IB = ix[(int)KQ-1]; IC = ix[Kmin+2-1]; IE = ix[Kmin-1]; IF = ix[(int)KQ -2-1]; if(((int)(IB+IC-IE-IF)/2)%2 !=0) {sgn1 = -1.;} }else if(Kmin == 5){ IE = ix[4]; IF = ix[5]; IB = ix[3]; IC = ix[2]; }else if(Kmin == 6){ } IP = IA-IB; IQ = IC-ID; if(abs(IP) >= abs(IQ)){ if(IP >= 0){ IQ = IC-ID; double sgn2 = 1.0; if(((int)(IB+ID-IF)/2 % 2) != 0) { sgn2 = -1.;} if( IE > 0 ) { printf("Here 177\n"); printf("ia = %lf\n", IA); printf("ib = %lf\n", IB); printf("ic = %lf\n", IC); printf("id = %lf\n", ID); printf("ie = %lf\n", IE); printf("if = %lf\n", IF); printf("it = %lf\n", IT); printf("ip = %lf\n", IP); printf("iq = %lf\n", IQ); // printf("bi = %lf\n", BI); nn[0] = (IA+IB+IE)/2 +1; nn[1] = (IC+ID+IE)/2 +1; nn[2] = (IA+IC+IF)/2 +1; nn[3] = (IB+ID+IF)/2 +1; nx[0] = nn[0] -IE; nx[1] = nn[0] -IB; nx[2] = nn[0] -IA; nx[3] = nn[1] -IE; nx[4] = nn[1] -ID; nx[5] = nn[1] -IC; nx[6] = nn[2] -IF; nx[7] = nn[2] -IC; nx[8] = nn[2] -IA; nx[9] = nn[3] -IF; nx[10] = nn[3] -ID; nx[11] = nn[3] -IB; IP = (IA+IB+IC+ID+4)/2; IQ = (IE+IF-IA-ID)/2; IT = (IE+IF-IB-IC)/2; double a = 1; double b = -IQ+1; if(a > b) { NZMIN = a; }else{ NZMIN = b; } double kzar[3] = {nx[1],nx[4],nx[10]}; double kzmn=kzar[0]; double kzmx=kzar[0]; for(int i=0;i<3;i++) { if(kzmn>kzar[i]) { kzmn=kzar[i]; } else if(kzmx= 0){ IQ = IC - ID; }else{ IT = IB; IB = IA; IA = IT; IT = ID; ID = IC; IC = IT; IP = -IP; } } double sgn2 = 1.; if((int)(IB+ID-IF)/2 %2 != 0) sgn2 = -1.; if(IE >= 0){ double BI = IB; double DI = ID; Racah = sgn1 * sgn2 / sqrt((BI+1.)*(DI+1.)); }else{ printf("Here 340\n"); printf("IA = %lf\n", IA); printf("IB = %lf\n", IB); printf("IC = %lf\n", IC); printf("ID = %lf\n", ID); printf("IE = %lf\n", IE); printf("IF = %lf\n", IF); printf("IT = %lf\n", IT); printf("IP = %lf\n", IP); printf("IQ = %lf\n", IQ); // printf("BI = %lf\n", BI); nn[0] = (IA+IB+IE)/2 +1; nn[1] = (IC+ID+IE)/2 +1; nn[2] = (IA+IC+IF)/2 +1; nn[3] = (IB+ID+IF)/2 +1; nx[0] = nn[0] -IE; nx[1] = nn[0] -IB; nx[2] = nn[0] -IA; nx[3] = nn[1] -IE; nx[4] = nn[1] -ID; nx[5] = nn[1] -IC; nx[6] = nn[2] -IF; nx[7] = nn[2] -IC; nx[8] = nn[2] -IA; nx[9] = nn[3] -IF; nx[10] = nn[3] -ID; nx[11] = nn[3] -IB; IP = (IA+IB+IC+ID+4)/2; IQ = (IE+IF-IA-ID)/2; IT = (IE+IF-IB-IC)/2; double a = 1; double b = -IQ+1; if(a > b) { NZMIN = a; }else{ NZMIN = b; } double kzar[3] = {nx[1],nx[4],nx[10]}; double kzmn=kzar[0]; double kzmx=kzar[0]; for(int i=0;i<3;i++) { if(kzmn>kzar[i]) { kzmn=kzar[i]; } else if(kzmx 0) { al0 = l0abs;} if(l0abs <= 0){ al0 = 1.;} double al1 = al0 + 1; double A[6] = {j1,j1,al0,al0,2,j2}; double B[6] = {j1,j1,al0,al0,4,j2}; double RCHA = RACAH(A); double RCHB = RACAH(B); printf("Racah A = %lf\n",RCHA); printf("Racah B = %lf\n",RCHB); return 0; }