00001 #ifndef __INCLUDE_YLMARRAY
00002 #define __INCLUDE_YLMARRAY
00003 #include "arrays.h"
00004
00005
00006
00007 CYlmArray::CYlmArray(int LMAXset,int NRADIALset){
00008 int L,M,ir;
00009 LMAX=LMAXset;
00010 NRADIAL=NRADIALset;
00011 ylm=new complex<double> **[LMAX+1];
00012 for(L=0;L<=LMAX;L++){
00013 ylm[L]=new complex<double> *[L+1];
00014 for(M=0;M<=L;M++){
00015 ylm[L][M]=new complex<double> [NRADIAL];
00016 for(ir=0;ir<NRADIAL;ir++) ylm[L][M][ir]=0.0;
00017 }
00018 }
00019 }
00020
00021 CYlmArray::~CYlmArray(){
00022 int L,m;
00023 for(L=0;L<=LMAX;L++){
00024 for(m=0;m<=L;m++) delete [] ylm[L][m];
00025 delete ylm[L];
00026 }
00027 delete ylm;
00028 }
00029
00030 int CYlmArray::GetLMAX(){
00031 return LMAX;
00032 }
00033
00034 complex<double> CYlmArray::GetElement(int L,int M,int ir){
00035 return ylm[L][M][ir];
00036 }
00037
00038 void CYlmArray::SetElement(int L,int M,int ir,complex<double> element){
00039 ylm[L][M][ir]=element;
00040 }
00041
00042 void CYlmArray::IncrementElement(int L,int M,int ir,complex<double> increment){
00043 ylm[L][M][ir]+=increment;
00044 }
00045
00046 void CYlmArray::ScaleArray(double scalefactor){
00047 int L,M,ir;
00048 for(L=0;L<=LMAX;L++){
00049 for(M=0;M<=L;M++){
00050 for(ir=0;ir<NRADIAL;ir++) ylm[L][M][ir]*=scalefactor;
00051 }
00052 }
00053 }
00054
00055 void CYlmArray::ScaleArray(double scalefactor,int ir){
00056 int L,M;
00057 for(L=0;L<=LMAX;L++){
00058 for(M=0;M<=L;M++){
00059 ylm[L][M][ir]*=scalefactor;
00060 }
00061 }
00062 }
00063
00064 void CYlmArray::ZeroArray(){
00065 int L,M,ir;
00066 for(L=0;L<=LMAX;L++){
00067 for(M=0;M<=L;M++){
00068 for(ir=0;ir<NRADIAL;ir++) ylm[L][M][ir]=0.0;
00069 }
00070 }
00071 }
00072
00073 void CYlmArray::ZeroArray(int ir){
00074 int L,M;
00075 for(L=0;L<=LMAX;L++){
00076 for(M=0;M<=L;M++){
00077 ylm[L][M][ir]=0.0;
00078 }
00079 }
00080 }
00081
00082 void CYlmArray::PrintArrayFixedIR(int ir){
00083 int L,M;
00084
00085 printf("\n______________________________________\n",ir);
00086 printf(" L \\ M :");
00087 for(M=0;M<=LMAX;M++) printf(" %2d ",M);
00088 printf("\n");
00089 for(L=0;L<=LMAX;L++){
00090 printf(" %3d : ",L);
00091 for(M=0;M<=LMAX;M++) printf("(%10.3e,%10.3e) ",
00092 real(ylm[L][M][ir]),imag(ylm[L][M][ir]));
00093 printf("\n");
00094 }
00095 printf("_________________________________________\n");
00096 }
00097
00098 #endif