#define CASTART 49 #define CCSTART 49 extern FILE *tester; // Elements for the TEAM2 algorithm void arctic_tables(ssmis_team2_tables &x); void antarctic_tables(ssmis_team2_tables &x); void lookuptable(ssmis_team2_tables &x); //////////////// Being TEAM2 code: void arctic_tables(ssmis_team2_tables &arctic) { grid2 tbmfy(n_atm, n_tb), tbmow(n_atm, n_tb), tbmcc(n_atm, n_tb); grid2 tbmthin(n_atm, n_tb); FILE *fin; ijpt loc; float tmp; double phi19, phi92; fin = fopen("seaice_TBfyark.tab.ssmisu","r"); for (loc.i = 0; loc.i < n_atm; loc.i++) { for (loc.j = 0; loc.j < n_tb; loc.j++) { fscanf(fin, "%f", &tmp); tbmfy[loc] = tmp; } } fclose(fin); fin = fopen("seaice_TBccark.tab.ssmisu","r"); for (loc.i = 0; loc.i < n_atm; loc.i++) { for (loc.j = 0; loc.j < n_tb; loc.j++) { fscanf(fin, "%f", &tmp); tbmcc[loc] = tmp; } } fclose(fin); fin = fopen("seaice_TBowark.tab.ssmisu","r"); for (loc.i = 0; loc.i < n_atm; loc.i++) { for (loc.j = 0; loc.j < n_tb; loc.j++) { fscanf(fin, "%f", &tmp); tbmow[loc] = tmp; } } fclose(fin); fin = fopen("seaice_TBthark.tab.ssmisu","r"); for (loc.i = 0; loc.i < n_atm; loc.i++) { for (loc.j = 0; loc.j < n_tb; loc.j++) { fscanf(fin, "%f", &tmp); tbmthin[loc] = tmp; } } fclose(fin); /* ROTATION */ phi19=-0.18; phi92=-0.06; arctic.tbmfy = tbmfy; arctic.tbmow = tbmow; arctic.tbmcc = tbmcc; arctic.tbmthin = tbmthin; arctic.phi19 = phi19; arctic.phi92 = phi92; return; } void antarctic_tables(ssmis_team2_tables &antarctic) { grid2 tbmfy(n_atm, n_tb), tbmow(n_atm, n_tb), tbmcc(n_atm, n_tb); FILE *fin; ijpt loc; float tmp; double phi19, phi92; fin = fopen("seaice_TBfyant.tab.ssmisu","r"); for (loc.i = 0; loc.i < n_atm; loc.i++) { for (loc.j = 0; loc.j < n_tb; loc.j++) { fscanf(fin, "%f", &tmp); tbmfy[loc] = tmp; } } fclose(fin); fin = fopen("seaice_TBccant.tab.ssmisu","r"); for (loc.i = 0; loc.i < n_atm; loc.i++) { for (loc.j = 0; loc.j < n_tb; loc.j++) { fscanf(fin, "%f", &tmp); tbmcc[loc] = tmp; } } fclose(fin); fin = fopen("seaice_TBowant.tab.ssmisu","r"); for (loc.i = 0; loc.i < n_atm; loc.i++) { for (loc.j = 0; loc.j < n_tb; loc.j++) { fscanf(fin, "%f", &tmp); tbmow[loc] = tmp; } } fclose(fin); /* ROTATION */ phi19=-0.59; phi92=-0.4; antarctic.tbmfy = tbmfy; antarctic.tbmow = tbmow; antarctic.tbmcc = tbmcc; antarctic.phi19 = phi19; antarctic.phi92 = phi92; return; } void lookuptable(ssmis_team2_tables &tab) { int ca, cb, k; float caf, cbf; float tb19h, tb19v, tb37v, tb92h, tb92v; float tb19ht, tb19vt, tb37vt, tb92ht, tb92vt; //float tb150h, tb150ht; for (int i = 0; i < n_atm; i++) { tab.LUT19[i].resize(101, 101); tab.LUT92[i].resize(101, 101); tab.LUT19thin[i].resize(101, 101); tab.LUT92thin[i].resize(101, 101); tab.LUTDGR[i].resize(101, 101); tab.LUTGR37[i].resize(101, 101); } int nx = tab.tbmow.xpoints(); ijpt loc; for (ca=0;ca<101;ca++) { loc.i = ca; for (cb=0;cb<(101-ca);cb++) { loc.j = cb; caf=ca/100.0; cbf=cb/100.0; for (k=0;k 50.)&&(v92 > 50.) ) { #ifdef TESTER fwrite(&tab.pole, sizeof(char), 1, tester); fwrite(&v19, sizeof(char), 1, tester); fwrite(&h19, sizeof(float), 1, tester); fwrite(&v22, sizeof(float), 1, tester); fwrite(&v37, sizeof(float), 1, tester); fwrite(&h37, sizeof(float), 1, tester); fwrite(&v92, sizeof(float), 1, tester); fwrite(&h92, sizeof(float), 1, tester); fwrite(&h150, sizeof(float), 1, tester); #endif /*** If data are valid and no land ***/ v19i=(double) v19; h19i=(double) h19; v22i=(double) v22; v37i=(double) v37; v92i=(double) v92; h92i=(double) h92; h150i=(double) h150; gr3719=(v37i-v19i)/(v37i+v19i); gr2219=(v22i-v19i)/(v22i+v19i); if ((gr3719 < 0.05) && (gr2219 < 0.045)){ /*** if passed the weather filters ***/ pr19=(v19i-h19i)/(v19i+h19i); pr92=(v92i-h92i)/(v92i+h92i); gr9219v=(v92i-v19i)/(v92i+v19i); gr9219h=(h92i-h19i)/(h92i+h19i); pr19r=-gr3719*sinphi19 + pr19*cosphi19; pr92r=-gr3719*sinphi92 + pr92*cosphi92; dgr=gr9219h-gr9219v; dmin=10000.; for (k=0;k=0)&&(ccj >=0)&& ((cai+ccj) >=0)&&((cai+ccj) < 101)){ if((tab.pole == 'n')&&(gr3719 > -0.01)&& (((x > 0)&&(x < 80)&&(y >100)&&(y <190))|| ((x > 80)&&(x <160)&&(y >0)&&(y <130)))){ /** Only pixels of Bering Sea (top) and Sea of Okhotsk (bottom **/ dpr19=pr19r-tab.LUT19thin[k][loc]; dpr92=pr92r-tab.LUT92thin[k][loc]; ddgr=gr3719-tab.LUTGR37[k][loc]; } else { dpr19=pr19r-tab.LUT19[k][loc]; dpr92=pr92r-tab.LUT92[k][loc]; ddgr=dgr-tab.LUTDGR[k][loc]; } d=w19*dpr19*dpr19+w92*dpr92*dpr92+wgr*ddgr*ddgr; if (d < dmin){ dmin=d; imin=i; jmin=j; } } /*endif*/ } /*endfor*/ }/*endfor*/ ca=ca+imin; cc=cc+jmin; } /*do */ while ((imin !=0)||(jmin != 0)); camina[k]=ca; ccmina[k]=cc; dmina[k]=dmin; #ifdef TESTER fwrite(&ca, sizeof(int), 1, tester); fwrite(&cc, sizeof(int), 1, tester); fwrite(&dmina , sizeof(double), 1, tester); fwrite(&k , sizeof(int), 1, tester); #endif } /*k*/ bestk=20; dmin=1000; for (k=0;k