//--------------------------------------------------------------------------- #include#pragma hdrstop #include "table2NC.h" #include "trigo.h" //--------------------------------------------------------------------------- extern double p; // longitude of lunar perigee extern double N; // longitude of moon's node // la table2 est issue à l'origine du "Manual of harmonic analysis and prediction of tides" // de P. Shureman. Elle a été complétée par un certain nombre de constantes // qui ne figuraient pas dans cette table. // La table donne pour chaque constituent, son nom, les coefficients // par lesquels il faut multiplier les variables de base, la vitesse // angulaire et les fonctions de correction nodale qui s'appliquent. // Par la suite, la table a été modifiée en remplacant les fonctions de correction nodale, // par celles qui figurent dans la "liste standard des constituents" publiée // par le "Tidal Committee" de l'IHO. // T angle horaire moyen // s longitude moyenne de la lune // h longitude moyenne du soleil // p longitude moyenne du périgée de la lune // p1 longitude moyenne du périgée du soleil // deg phase // speed // u correction nodale de phase // f facteur de correction nodale d'amplitude struct constituentsNC table2NC[nb_const]= // T s h p p1 deg speed u f { // longues periodes { "SA" , 0, 0, 1, 0, 0, 0, 0.0410686, zero, one}, { "SSA" , 0, 0, 2, 0, 0, 0, 0.0821373, zero, one}, { "MSM" , 0, 1,-2, 1, 0, 0, 0.4715211, zero, f2M2}, // MNum = M2-Nu2 { "MM" , 0, 1, 0,-1, 0, 0, 0.5443747, zero, fMm}, { "MSF" , 0, 2,-2, 0, 0, 0, 1.0158958, uminusM2,fM2}, // S2-M2 { "MF" , 0, 2, 0, 0, 0, 0, 1.0980331, uMf, fMf}, // diurnes { "2Q1" , 1,-4, 1, 2, 0, -90, 12.8542862, uO1, fO1}, { "SIGMA1" , 1,-4, 3, 0, 0, -90, 12.9271398, uO1, fO1}, { "Q1" , 1,-3, 1, 1, 0, -90, 13.3986609, uO1, fO1}, { "RHO1" , 1,-3, 3,-1, 0, -90, 13.4715145, uO1, fO1}, { "O1" , 1,-2, 1, 0, 0, -90, 13.9430356, uO1, fO1}, { "MS1" , 1,-2, 2, 0, 0,+180, 13.9841042, uM2, fM2}, // M2-S1 { "MP1" , 1,-2, 3, 0, 0, +90, 14.0251729, uM2, fM2}, { "M1" , 1,-1, 1, 1, 0, +90, 14.4966939, uM1, fM1}, { "CHI1" , 1,-1, 3,-1, 0, +90, 14.5695476, uJ1, fJ1}, { "PI1" , 1, 0,-2, 0, 1, -90, 14.9178647, zero, one}, { "P1" , 1, 0,-1, 0, 0, -90, 14.9589314, zero, one}, { "S1" , 1, 0, 0, 0, 0, -90, 15.0 , zero, one}, { "K1" , 1, 0, 1, 0, 0, +90, 15.0410686, uK1, fK1}, { "PSI1" , 1, 0, 2, 0,-1, +90, 15.0821353, zero, one}, { "PHI1" , 1, 0, 3, 0, 0, +90, 15.1232059, uJ1, fJ1}, { "THETA1" , 1, 1,-1, 1, 0, +90, 15.5125897, uJ1, fJ1}, { "J1" , 1, 1, 1,-1, 0, +90, 15.5854433, uJ1, fJ1}, { "OO1" , 1, 2, 1, 0, 0, +90, 16.1391017, uK2mQ1, fK2Q1}, //like KQ1=K2-Q1 // semi diurnes { "2MN2S2" , 2,-7, 6, 1, 0, 0, 26.4079380, u3M2, f3M2}, { "2NS2" , 2,-6, 4, 2, 0, 0, 26.8794591, u2M2, f2M2}, { "3M2S2" , 2,-6, 6, 0, 0, 0, 26.9523127, u3M2, f3M2}, { "OQ2" , 2,-5, 2, 1, 0, 0, 27.3416965, u2M2mK2, f2M2K2}, // MNK2 { "MNS2" , 2,-5, 4, 1, 0, 0, 27.4238337, u2M2, f2M2}, { "MNUS2" , 2,-5, 6,-1, 0, 0, 27.4966874, u2M2, f2M2}, { "2MK2" , 2,-4, 2, 0, 0, 0, 27.8860712, u2M2mK2, f2M2K2}, // 2M2-K2 { "2N2" , 2,-4, 2, 2, 0, 0, 27.8953548, uM2, fM2}, { "MU2" , 2,-4, 4, 0, 0, 0, 27.9682084, uM2, fM2}, { "N2" , 2,-3, 2, 1, 0, 0, 28.4397295, uM2, fM2}, { "NU2" , 2,-3, 4,-1, 0, 0, 28.5125831, uM2, fM2}, { "OP2" , 2,-2, 0, 0, 0, 0, 28.9019670, uM2mK2, fM2K2}, // MSK2 { "GAMMA2" , 2,-2, 0, 2, 0,+180, 28.9112506, uGamma2, fGamma2}, { "M(SK)2" , 2,-2, 1, 0,+1,+180, 28.9430375, uM2mK1, fM2K1}, // M2+S1-K1 { "M2" , 2,-2, 2, 0, 0, 0, 28.9841042, uM2, fM2}, { "M(KS)2" , 2,-2, 3, 0,-1, 0, 29.0251709, uM2pK1, fM2K1}, // M2+K1-S1 { "MKS2" , 2,-2, 4, 0, 0, 0, 29.0662415, uM2pK2, fM2K2}, { "LAMBDA2" , 2,-1, 0, 1, 0,+180, 29.4556253, uM2, fM2}, { "L2" , 2,-1, 2,-1, 0,+180, 29.5284789, uL2, fL2}, // 2MN2 { "NKM2" , 2,-1, 2, 1, 0, 0, 29.5377625, uK2, f2M2K2}, //N2+K2-M2 { "T2" , 2, 0,-1, 0, 1, 0, 29.9589333, zero, one}, { "S2" , 2, 0, 0, 0, 0, 0, 30.0 , zero, one}, { "R2" , 2, 0, 1, 0,-1,+180, 30.0410667, zero, one}, { "K2" , 2, 0, 2, 0, 0, 0, 30.0821373, uK2, fK2}, { "MSN2" , 2, 1, 0,-1, 0, 0, 30.5443747, zero, f2M2}, // ETA2 { "KJ2" , 2, 1, 2,-1, 0, 0, 30.6265120, uK1pJ1, fK1J1}, // K1+J1 { "2SM2" , 2, 2,-2, 0, 0, 0, 31.0158958, uminusM2,fM2}, { "SKM2" , 2, 2, 0, 0, 0, 0, 31.0980331, uK2mM2, fM2K2}, // tiers diurnes { "2MK3" , 3,-4, 3, 0, 0, -90, 42.9271398, u2M2pK1, f2M2K1}, // 2M2+K1 { "M3" , 3,-3, 3, 0, 0,+180, 43.4761563, uM3, fM3}, { "SO3" , 3,-2, 1, 0, 0, -90, 43.9430356, uO1, fO1}, { "MS3" , 3,-2, 2, 0, 0,+180, 43.9841042, uM2, fM2}, { "MK3" , 3,-2, 3, 0, 0, +90, 44.0251729, uM2pK1, fM2K1}, { "SP3" , 3, 0,-1, 0, 0, 0, 44.9589314, zero, one}, { "S3" , 3, 0, 0, 0, 0, 0, 45.0 , zero, one}, { "SK3" , 3, 0, 1, 0, 0, +90, 45.0410686, uK1, fK1}, // quart diurnes { "2MMUS4" , 4,-8, 8, 0, 0, 0, 55.9364168, u3M2, f3M2}, { "2MNS4" , 4,-7, 6, 1, 0, 0, 56.4079380, u3M2, f3M2}, { "N4" , 4,-6, 4, 2, 0, 0, 56.8794591, u2M2, f2M2}, { "3MS4" , 4,-6, 6, 0, 0, 0, 56.9523127, u3M2, f3M2}, { "MN4" , 4,-5, 4, 1, 0, 0, 57.4238337, u2M2, f2M2}, { "MNU4" , 4,-5, 6,-1, 0, 0, 57.4966874, u2M2, f2M2}, { "2MSK4" , 4,-4, 2, 0, 0, 0, 57.8860712, u2M2mK2, f2M2K2},// 2M2+S2-K2 { "M4" , 4,-4, 4, 0, 0, 0, 57.9682084, u2M2, f2M2}, { "2MKS4" , 4,-4, 6, 0, 0, 0, 58.0503457, u2M2pK2, f2M2K2},// 2M2+K2-S2 { "SN4" , 4,-3, 2, 1, 0, 0, 58.4397295, uM2, fM2}, { "3MN4" , 4,-3, 4,-1, 0, 0, 58.5125832, u2M2, f4M2}, // ML4 { "NK4" , 4,-3, 4, 1, 0, 0, 58.5218667, uM2pK2, fM2K2}, { "MT4" , 4,-2, 1, 0, 1, 0, 58.9430375, uM2, fM2}, { "MS4" , 4,-2, 2, 0, 0, 0, 58.9841042, uM2, fM2}, { "MK4" , 4,-2, 4, 0, 0, 0, 59.0662415, uM2pK2, fM2K2}, { "2SNM4" , 4,-1, 0, 1, 0, 0, 59.4556253, zero, f2M2}, { "2MSN4" , 4,-1, 2,-1, 0, 0, 59.5284789, uM2, f3M2}, { "S4" , 4, 0, 0, 0, 0, 0, 60.0 , zero, one}, { "SK4" , 4, 0, 2, 0, 0, 0, 60.0821372, uK2, fK2}, // 6 eme diurnes { "3MNK6" , 6,-9, 6, 1, 0, 0, 85.3099049, u4M2mK2, f4M2K2}, { "3MNS6" , 6,-9, 8, 1, 0, 0, 85.3920422, u4M2, f4M2}, { "3MNUS6" , 6,-9,10,-1, 0, 0, 85.4648958, u4M2, f4M2}, { "4MK6" , 6,-8, 6, 0, 0, 0, 85.8542796, u4M2mK2, f4M2K2}, { "2NM6" , 6,-8, 6, 2, 0, 0, 85.8635632, u3M2, f3M2}, { "4MS6" , 6,-8, 8, 0, 0, 0, 85.9364169, u4M2, f4M2}, { "2MN6" , 6,-7, 6, 1, 0, 0, 86.4079380, u3M2, f3M2}, { "2MNU6" , 6,-7, 8,-1, 0, 0, 86.4807915, u3M2, f3M2}, { "3MSK6" , 6,-6, 4, 0, 0, 0, 86.8701754, u3M2mK2, f3M2K2}, { "M6" , 6,-6, 6, 0, 0, 0, 86.9523127, u3M2, f3M2}, { "3MKS6" , 6,-6, 8, 0, 0, 0, 87.0344499, u3M2pK2, f3M2K2}, { "MSN6" , 6,-5, 4, 1, 0, 0, 87.4238337, u2M2, f2M2}, { "4MN6" , 6,-5, 6,-1, 0, 0, 87.4966874, u3M2, f5M2}, // 2ML6 { "MNK6" , 6,-5, 6, 1, 0, 0, 87.5059709, u2M2pK2, f2M2K2}, //M2+N2+K2 { "2MT6" , 6,-4, 3, 0, 1, 0, 87.9271417, u2M2, f2M2}, { "2MS6" , 6,-4, 4, 0, 0, 0, 87.9682084, u2M2, f2M2}, { "2MK6" , 6,-4, 6, 0, 0, 0, 88.0503457, u2M2pK2, f2M2K2}, { "2SN6" , 6,-3, 2, 1, 0, 0, 88.4397295, uM2, fM2}, { "3MSN6" , 6,-3, 4,-1, 0, 0, 88.5125831, u2M2, f4M2}, { "3MKN6" , 6,-3, 6,-1, 0, 0, 88.5947203, u2M2pK2, f4M2K2}, // 3M2+K2-N2 { "2SM6" , 6,-2, 2, 0, 0, 0, 88.9841042, uM2, fM2}, { "MSK6" , 6,-2, 4, 0, 0, 0, 89.0662415, uM2pK2, fM2K2}, // 8 eme diurnes { "2(MN)8" , 8,-10,8, 2, 0, 0, 114.8476675, u4M2, f4M2}, { "3MN8" , 8,-9, 8, 1, 0, 0, 115.3920422, u4M2, f4M2}, { "3MNU8" , 8,-9,10,-1, 0, 0, 115.4648957, u4M2, f4M2}, { "M8" , 8,-8, 8, 0, 0, 0, 115.9364169, u4M2, f4M2}, { "2MSN8" , 8,-7, 6, 1, 0, 0, 116.4079380, u3M2, f3M2}, { "3MS8" , 8,-6, 6, 0, 0, 0, 116.9523127, u3M2, f3M2}, { "3MK8" , 8,-6, 8, 0, 0, 0, 117.0344499, u3M2pK2, f3M2K2}, { "4MSN8" , 8,-5, 6,-1, 0, 0, 117.4966873, u3M2, f5M2}, { "2(MS)8" , 8,-4, 4, 0, 0, 0, 117.9682084, u2M2, f2M2}, // 10 eme diurnes { "4MN10" ,10,-11,10, 1, 0, 0, 144.3761463, u5M2, f5M2}, { "M10" ,10,-10,10, 0, 0, 0, 144.9205210, u5M2, f5M2}, { "3MSN10" ,10, -9, 8, 1, 0, 0, 145.3920421, u4M2, f4M2}, { "4MS10" ,10, -8, 8, 0, 0, 0, 145.9364168, u4M2, f4M2}, { "5MSN10" ,10, -7, 8,-1, 0, 0, 146.4807915, u4M2, f6M2}, { "3M2S10" ,10, -6, 6, 0, 0, 0, 146.9523126, u3M2, f3M2}, }; //--------------------------------------------------------------------------- double zero() { return 0.; } double one() { return 1.; } //--------------------------------------------------------------------------- double fMm() { return 1.0 -0.1311*cos_deg(N) +0.0538*cos_deg(2.*p)+0.0205*cos_deg(2.*p-N); } double uMf() { return -23.7*sin_deg(N) +2.7*sin_deg(2.*N) -0.4*sin_deg(3.*N); } double fMf() { return 1.084 +0.415*cos_deg(N) +0.039*cos_deg(2.*N); } //--------------------------------------------------------------------------- double uO1() { return 10.80*sin_deg(N) -1.34*sin_deg(2.*N) +0.19*sin_deg(3.*N);} double fO1() { return 1.0176 +0.1871*cos_deg(N) -0.0147*cos_deg(2.*N); } //--------------------------------------------------------------------------- double uK1() { return -8.86*sin_deg(N) +0.68*sin_deg(2.*N) -0.07*sin_deg(3.*N);} double fK1() { return 1.0060 +0.1150*cos_deg(N)- 0.0088*cos_deg(2.*N)+ 0.0006*cos_deg(3.*N);} //--------------------------------------------------------------------------- double uJ1() { return -12.94*sin_deg(N) +1.34*sin_deg(2.*N) -0.19*sin_deg(3.*N);} double fJ1() { return 1.1029 +0.1676*cos_deg(N) -0.0170*cos_deg(2.*N) +0.0016*cos_deg(3.*N); } //--------------------------------------------------------------------------- double uM2() { return -2.14*sin_deg(N); } double fM2() { return 1.0007 -0.0373*cos_deg(N) + 0.0002*cos_deg(2.*N); } //--------------------------------------------------------------------------- double uK2() { return -17.74*sin_deg(N) +0.68*sin_deg(2.*N) -0.04*sin_deg(3.*N);} double fK2() { return 1.0246 +0.2863*cos_deg(N) + 0.0083*cos_deg(2.*N) - 0.0015*cos_deg(3.*N); } //--------------------------------------------------------------------------- double uM3() { return -3.21*sin_deg(N); } double fM3() { return pow(sqrt(fM2()),3); } //--------------------------------------------------------------------------- double uminusM2() { return -uM2(); } double u2M2() { return 2.*uM2(); } double u3M2() { return 3.*uM2(); } double u4M2() { return 4.*uM2(); } double u5M2() { return 5.*uM2(); } double u6M2() { return 6.*uM2(); } //--------------------------------------------------------------------------- double f2M2() { return pow(fM2(),2.); } double f3M2() { return pow(fM2(),3.); } double f4M2() { return pow(fM2(),4.); } double f5M2() { return pow(fM2(),5.); } double f6M2() { return pow(fM2(),6.); } //--------------------------------------------------------------------------- // dans le nom des fonctions qui suivent, m sgnifie moins, p signifie plus double uM2mK1() { return uM2()-uK1(); } double uM2pK1() { return uM2()+uK1(); } double fM2K1() { return fM2()*fK1(); } double u2M2pK1() { return 2.*uM2()+uK1(); } double f2M2K1() { return pow(fM2(),2.)*fK1(); } //--------------------------------------------------------------------------- double uM2mK2() { return uM2()-uK2(); } double uM2pK2() { return uM2()+uK2(); } double uK2mM2() { return uK2()-uM2(); } double fM2K2() { return fM2()*fK2(); } //--------------------------------------------------------------------------- double u2M2mK2() { return 2.*uM2()-uK2(); } double u2M2pK2() { return 2.*uM2()+uK2(); } double f2M2K2() { return pow(fM2(),2.)*fK2(); } //--------------------------------------------------------------------------- double u3M2mK2() { return 3.*uM2()-uK2(); } double u3M2pK2() { return 3.*uM2()+uK2(); } double f3M2K2() { return pow(fM2(),3.)*fK2(); } //--------------------------------------------------------------------------- double u4M2mK2() { return 4.*uM2()-uK2(); } double f4M2K2() { return pow(fM2(),4)*fK2(); } //--------------------------------------------------------------------------- double uM1() { return RadToDeg*atan2(sin_deg(p)+0.2*sin_deg(p-N) , 2.*(cos_deg(p)+0.2*cos_deg(p-N)) ); } double fM1() { return sqrt(pow(sin_deg(p)+0.2*sin_deg(p-N),2) + pow(2.*(cos_deg(p)+0.2*cos_deg(p-N)),2)); } //--------------------------------------------------------------------------- double uGamma2() { return RadToDeg*atan2(0.147*sin_deg(2.*(N-p)) , 1.+0.147*cos_deg(2.*(N-p)) ); } double fGamma2() { return sqrt(pow(0.147*sin_deg(2.*(N-p)),2) + pow(1.+0.147*cos_deg(2.*(N-p)),2)); } //--------------------------------------------------------------------------- double uL2() { return RadToDeg*atan2( -0.2505*sin_deg(2.*p)-0.1102*sin_deg(2.*p-N)-0.0156*sin_deg(2.*p-2.*N)-0.037*sin_deg(N), 1.-0.2505*cos_deg(2.*p)-0.1102*cos_deg(2.*p-N)-0.0156*cos_deg(2.*p-2.*N)-0.037*cos_deg(N) ); } double fL2() { return sqrt( pow(-0.2505*sin_deg(2.*p)-0.1102*sin_deg(2.*p-N)-0.0156*sin_deg(2.*p-2.*N)-0.037*sin_deg(N),2)+ pow(1.-0.2505*cos_deg(2.*p)-0.1102*cos_deg(2.*p-N)-0.0156*cos_deg(2.*p-2.*N)-0.037*cos_deg(N),2) ); } //--------------------------------------------------------------------------- double uK1pJ1() { return uK1()+uJ1(); } double fK1J1() { return fK1()*fJ1(); } //--------------------------------------------------------------------------- double uK2mQ1() { return uK2()-uO1(); } double fK2Q1() { return fK2()*fO1(); } //--------------------------------------------------------------------------- #pragma package(smart_init)