#include "fortranfunctions.h" #include #include #include extern "C" void smooth_profile( float* za_hi, float* ta_hi, float* pa_hi, float **qmix_hi, float* stdz, float* zmx, int* ml, int* nl, int* nch, float* ztop, float* zbot, int* idg, int* ng, int* igdo, int* ngdo, float* zhydro, float* re, float* xlat ) { std::vector hold; static int c__1 =1; for(int ig = 0; ig < *ngdo; ++ig) { if(zmx[ig] <=0.0) continue; hold.clear(); //std::cout << zstart[0][0] << std::endl; exit(23); /* float ztop=0.0 ,zbot=900.0; for(int ich=0; ich< *nch; ++ich) { ztop = std::max(zstart[ich][ig], ztop); zbot = std::min(zend[ich][ig], zbot); } */ float* z1 = std::find_if(za_hi, za_hi+ *nl, std::bind2nd(std::less_equal(), ztop[ig] ) ) ; float* z2 = std::find_if(za_hi, za_hi+ *nl, std::bind2nd(std::less(), zbot[ig] ) ) -1 ; int istart = (int)std::distance(za_hi, z1)+1; int istop = (int)std::distance(za_hi, z2)+1; // gases if(igdo[ig] > 0 ) { int* j = std::find(idg, idg+ *ng, igdo[ig] ); int ik = (int)std::distance(idg, j) ; // make values below the bottom point // equal the bottom point before smoothing // for(int il=istop; il < *nl ; ++il ) { // qmix_hi[ik][il] = qmix_hi[ik][istop-1]; // } /* for(int il=0; il < *nl ; ++il ) std::cout << qmix_hi[ik][il] << " " << za_hi[il] << std::endl; exit(23); */ for(int il= istart; il <= istop; ++il) { hold.push_back( ::smooth_(&istop , &istart, &istop, &il, za_hi, &qmix_hi[ik][0], &stdz[ig], &zmx[ig] ) ); // hold.push_back( ::smooth_(nl, &c__1, nl, &il, za_hi, // &qmix_hi[ik][0], &stdz[ig], &zmx[ig] ) ); } std::copy(hold.begin(), hold.end(), &qmix_hi[ik][istart-1] ); // temp } else { for(int il= istart; il <= istop ; ++il) { hold.push_back( ::smooth_(&istop , &istart, &istop, &il, za_hi, ta_hi, &stdz[ig], &zmx[ig] ) ); // hold.push_back( ::smooth_(nl, &c__1, nl, &il, za_hi, ta_hi, // &stdz[ig], &zmx[ig]) ); //std::cout << ta_hi[il-1] << " " << pa_hi[il-1] << std::endl; } std::copy(hold.begin(), hold.end(), &ta_hi[istart-1] ); z2 = std::find_if(za_hi, za_hi+ *nl, std::bind2nd(std::less(), *zhydro ) ) -1 ; int itie = (int)std::distance(za_hi, z2)+1; // ::hydro_(ml, &istart, &istop, &itie, re, xlat, za_hi, pa_hi, ta_hi ); ::hydro_(ml, &c__1, nl, &itie, re, xlat, za_hi, pa_hi, ta_hi ); //std::cout << "&" << std::endl; // for(int il= istart; il <= istop ; ++il) // std::cout << ta_hi[il-1] << " " << pa_hi[il-1] << std::endl; // exit(23); } //end else temps } // end for }