Это поможет вам начать - я не пытался его скомпилировать, но он близок к тому, что вам нужно. Я предположил, что массивы olon, u, v, un и vn передаются вашей функции в качестве указателей.
const double rotcon_p = 0.422618;
const double lon_xx_p = -95.0;
const double lat_tan_p = 25.0;
for (j=0;j<ny_p;++j)
{
for (i=0,i<nx_p;++i)
{
double angle2 = rotcon_p*(olon[i][j]-lon_xx_p)*0.017453;
double sinx2 = sin(angle2);
double cosx2 = cos(angle2);
for (k=0;k<nsp_p;++k)
{
double ut = u[i][j][k]
double vt = v[i][j][k]
un[i][j][k] = cosx2*ut+sinx2*vt
vn[i][j][k] =-sinx2*ut+cosx2*vt
}
}
}
Если вы полностью остаетесь в c / c ++, это будет хорошо, если вы смешиваете FORTRAN и c / c ++, вам нужно знать, что FORTRAN и c / c ++ индексируют свои массивы в обратном направлении, поэтому вам, возможно, придется поменяться ваши показатели, чтобы заставить его работать
const double rotcon_p = 0.422618;
const double lon_xx_p = -95.0;
const double lat_tan_p = 25.0;
for (j=0;j<ny_p;++j)
{
for (i=0,i<nx_p;++i)
{
double angle2 = rotcon_p*(olon[j][i]-lon_xx_p)*0.017453;
double sinx2 = sin(angle2);
double cosx2 = cos(angle2);
for (k=0;k<nsp_p;++k)
{
double ut = u[k][j][i]
double vt = v[k][j][i]
un[k][j][i] = cosx2*ut+sinx2*vt
vn[k][j][i] =-sinx2*ut+cosx2*vt
}
}
}
Но у меня недостаточно контекста для вашей проблемы, чтобы сказать вам, что вам нужно сделать.